Notebook

これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。

HTML ファイル生成日時: 2024/12/21 11:44:57.596 (台灣標準時)

NetBSD で Linux binary を実行する方法について

Linux 用にコンパイルされた binary ファイルを、何も設定をしていない NetBSD 上で実行しようとすると、以下のように失敗してしまうでござる。


% file ./ls 
./ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6461a544c35b9dc1d172d1a1c09043e487326966, for GNU/Linux 3.2.0, stripped
% ./ls 
./ls: Exec format error. Binary file not executable.

Linux binary の実行には、準備が必要でござる。

suse15_base のインストール

pkgsrc を使って suse15_base をインストールするでござる。


# cd /usr/pkgsrc/emulators/suse15_base
# make install

.....

===> Installing binary package of suse_base-15.5nb1
suse_base-15.5nb1: rebuilding run-time library search paths database
suse_base-15.5nb1: populating /usr/pkg/emul/linux/dev
suse_base-15.5nb1: creating symlink /usr/pkg/emul/linux -> /emul/linux
===========================================================================
$NetBSD: MESSAGE.NetBSD,v 1.1 2022/10/02 17:17:17 wiz Exp $

Do not forget to modload the compat_linux or compat_linux32 modules.
Linux binaries require these in order to work. In older NetBSD versions
these will be autoloaded. Edit /etc/modules.conf to load the modules
automatically on boot.

Some Linux binaries also require tmpfs to be mounted on /dev/shm.
This can be automated by adding the following to your /etc/fstab:

tmpfs /emul/linux/dev/shm tmpfs rw,-m1777

===========================================================================

fig_202305/xterm_suse15_00.png

suse15_base のインストールが終わったので、 Linux binary を実行してみる でござる。


% file ./ls
./ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6461a544c35b9dc1d172d1a1c09043e487326966, for GNU/Linux 3.2.0, stripped
% ./ls 
./ls: Exec format error. Binary file not executable.

やはり、カーネルモジュールの compat_linux をロードする必要があるようで ござる。

カーネルモジュール compat_linux のロード

以下のようにして、カーネルモジュール compat_linux をロードするでござる。


# modload compat_linux
# modstat | grep compat_linux
compat_linux               exec     filesys  -        0   55547 compat_ossaudio,sysv_ipc,compat_util,compat_50,compat_43,exec_elf64

fig_202305/xterm_suse15_01.png

Linux binary の実行

再度、 Linux binary の実行をしてみるでござる。


% file ./ls
./ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6461a544c35b9dc1d172d1a1c09043e487326966, for GNU/Linux 3.2.0, stripped
% ./ls 
dbus-034CG4s95m              ls               ssh-pE1Ejc2k1qsL
dbus-ZMVqRSmO4H              man.pP9xzz       xterm_suse15_00.png
ds9                          packages         xterm_suse15_01.png
ds9.opensuse15.8.4.1.tar.gz  runtime-daisuke

今度は、期待通りに動作したでござる。

SAOimage DS9 の Linux binary の実行

次に、 SAOimage DS9 の Linux binary を実行してみるでござる。


% file ./ds9
./ds9: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=dccdae1f4044218178bfbc8a18331b691bd36e34, stripped
% ./ds9 
./ds9: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory

X11 関連のライブラリーがないので、インストールする必要があるようでござ る。 pkgsrc を使ってインストールすればよいでござる。


# cd /usr/pkgsrc/emulators/suse15_x11
# make install

.....

===> Building binary package for suse_x11-15.5
=> Creating binary package /tmp/packages/All/suse_x11-15.5.tgz
===> Installing binary package of suse_x11-15.5
suse_x11-15.5: rebuilding run-time library search paths database

SAOimage DS9 を実行してみるでござる。


% ./ds9
./ds9: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory

libfontconfig がないようでござる。


# cd /usr/pkgsrc/emulators/suse15_fontconfig
# make install

.....

===> Building binary package for suse_fontconfig-15.5
=> Creating binary package /tmp/packages/All/suse_fontconfig-15.5.tgz
===> Installing binary package of suse_fontconfig-15.5
suse_fontconfig-15.5: rebuilding run-time library search paths database

SAOimage DS9 を実行してみるでござる。


% ./ds9
./ds9: error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory

libxml2 がないようでござる。


# cd /usr/pkgsrc/emulators/suse15_libxml2
# make install

.....

===> Building binary package for suse_libxml2-15.5
=> Creating binary package /tmp/packages/All/suse_libxml2-15.5.tgz
===> Installing binary package of suse_libxml2-15.5
suse_libxml2-15.5: rebuilding run-time library search paths database

SAOimage DS9 を実行してみるでござる。


% ./ds9

SAOimage DS9 がめでたく起動したでござる。

fig_202305/ds9_00.png

FITS ファイルを読み込んで、表示させてみるでござる。

fig_202305/ds9_01.png
fig_202305/ds9_02.png
fig_202305/ds9_03.png
fig_202305/ds9_04.png

問題なく動作するようでござる。

OS の起動時に compat_linux カーネルモジュールがロードされるようにする

まず、 modules.conf についてのマニュアルを読んでみるでござる。


% man modules.conf

fig_202305/xterm_suse15_02.png

/etc/modules.conf ファイルに、 OS 起動時にロードしたいカーネルモジュー ルの名前を一行に一つずつ書いておけばよいようでござる。


# cat /etc/modules.conf
cat: /etc/modules.conf: No such file or directory
# echo "compat_linux" > /etc/modules.conf
# ls -lF /etc/modules.conf 
-rw-r--r--  1 root  wheel  13 May  7 19:05 /etc/modules.conf
# cat /etc/modules.conf 
compat_linux



Frequently accessed files

  1. Computer___Python/20220518_0.html
  2. Computer___Network/20230726_00.html
  3. Misc___Taiwan/20240207_00.html
  4. Computer___Network/20230516_00.html
  5. Computer___FreeBSD/20220621_0.html
  6. Computer___Python/20220715_0.html
  7. Computer___Network/20230508_00.html
  8. Food___Taiwan/20220429_0.html
  9. Computer___Network/20240130_00.html
  10. Computer___NetBSD/20220817_3.html
  11. Computer___Python/20220410_0.html
  12. Computer___Network/20240416_00.html
  13. Computer___NetBSD/20230119_00.html
  14. Computer___Debian/20210223_1.html
  15. Computer___Python/20221013_0.html
  16. Computer___Python/20210124_0.html
  17. Computer___NetBSD/20220428_0.html
  18. Computer___NetBSD/20220818_1.html
  19. Computer___NetBSD/20240101_02.html
  20. Science___Math/20220420_0.html
  21. Computer___Python/20240101_00.html
  22. Computer___NetBSD/20220808_0.html
  23. Computer___TeX/20230503_00.html
  24. Science___Astronomy/20220503_0.html
  25. Computer___NetBSD/20230515_00.html
  26. Computer___Network/20220413_1.html
  27. Computer___NetBSD/20210127_0.html
  28. Computer___TeX/20231107_00.html
  29. Computer___Python/20220816_1.html
  30. Computer___Python/20230717_01.html


HTML file generated by Kinoshita Daisuke.