Windows11 WSL2 に Plamo Linux を install してみた
当日記ではアフィリエイト広告を利用しています
WSL2 には Microsoft Store 又は wsl command で distribution が install できます。しかし前回の記事で試したように distrod を使用すると (少し不具合はあるものの) linuxcontainers.org の container 24種類が WSL2 で使用できます。その中に Plamo Linux も含まれていますが installpkg が使えない状態であり、ちゃんと使える状態ではありませんでした。調べてみると wsl の import command は単なる tar ball を再配置するだけのようですので、他の distribution も install できそうです。そこで、今回は軽量 Linux で systemd を使用していない distribution ということで、Plamo Linux を WSL2 に install してみる事にしました。
- distrod で install した Plamo Linux の状態
- 他のdistribution の WSL2 の対応状況と install 方法
- 仮想マシンへの Plamo Linux の install
- 最小構成で install した partition から tar ball を作成する
- distrobuilder を使用して tar ball を作成する
- まとめ
distrod で install した Plamo Linux の状態
linuxcontainers.org から install できる container 版の Plamo Linux ですが、簡単に導入できるメリットはあるものの、
という不具合 (というか特徴?) がありました。00_base のみ install されているので、pkgtools8 や wget が入っていません。
WSL2 では mount option があるので、Plamo Linux の ISO image を mount すれば package の install は出来そうですが、常用できる環境まで整えるのは大変な状態だと感じました。
他のdistribution の WSL2 の対応状況と install 方法
幾つかの distribution では WSL2 への install が実現できているようです。
- Arch Linux : ArchWSL
- Slackware : WSLackware
Gentoo Linux の install 方法を見ると、
- '/' を基準とした package install 済みの tar ball を準備
- wsl --import で vhdx に読み込み (この際に init が配置される?)
というやり方であれば、基本的にどんな distribution でも WSL2 に入れられるはずです。
そこで、仮想マシンに新たに Plamo Linux を最小構成で install して、それを tar ball にまとめて import してみる事にしました。
仮想マシンへの Plamo Linux の install
今は Ubuntu や debian を使う事が多く、久し振りの Plamo Linux です。前回は Plamo 1.x の頃でしょうか (Plamo 開発の歩みによると1998年の Software Design の付録だったと記憶していますので Version 1.3 でしょう)。久々の install でやり方を忘れていますので、思い出しながら進めました。
install 環境
WSL2 Ubuntu + distrod systemd 化の環境で qemu-kvm を使用して install してみました。前回の記事で WSL2 で distrod を使い始めたので、WSLg 含め不具合がないかを確認する意味もあります。
hiro20180901.hatenablog.com
上記の記事に追記しましたが、distrod の linuxcontainers.org からの軽量 container の install では、WSLg は動作するものの、gnome-tweaks 等による設定が反映されない不具合 (/mnt/wslg 以下の Owner が login user ではなく 'ubuntu' になっている。chown で変更しても再起動で戻る) がありますので、今回は WSL2 Ubuntu に distrod を install した環境で試しています。
ですので、
- WSL2 Ubuntu install & apt upgrade
- distrod による systemd 有効化
- 日本語環境整備 (参考:Windows11 WSL2 & WSLg Ubuntu の初期設定 - hiroの長い冒険日記)
- qemu-kvm 設定 (参考:Windows11 WSL2 qemu (Nested VM) の使い方と他の仮想マシンとの速度比較 - hiroの長い冒険日記)
が済んだ状態で、qemu-kvm に Plamo Linux を install しました。
仮想HDD の準備と仮想マシンの起動
過去に試した内容と重複しますので、詳細は過去記事を参照ください。
hiro20180901.hatenablog.com
仮想HDD 作成 :
WSL2-distrod Ubuntu bash :
$ mkdir qemu_vm $ mkdir qemu_vm/plamo $ cd qemu_vm/plamo $ qemu-img create -f qcow2 ./PlamoLinux.qcow2 32G $ cp /usr/share/OVMF/OVMF_VARS.fd .
- qcow2 で 32GB の仮想 HDD を準備します。
- GPT 形式で install する為、UEFI の書き換えする部分を qcow2 と同じ folder に準備します。
install 用 script :
WSL2-distrod Ubuntu bash :
$ cd ~/qemu_vm/plamo $ kvm -m 8G -smp 4 \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \ -drive if=pflash,format=raw,file=OVMF_VARS.fd \ -drive file=PlamoLinux.qcow2,if=virtio \ -net nic,model=virtio -net user,hostfwd=tcp::2222-:22 \ -machine vmport=off \ -vga qxl \ -spice port=5900,disable-ticketing=on \ -cdrom /mnt/e/ISO/plamo-7.4_x86_64_2021-12-09_usb.iso -boot once=d -no-reboot
- Windows側で download している plamo-7.4 の 2021/12/09 version を使用しました。ML を見ていたら get_pkginfo の際に最新版を使用していた方がよいとのコメントがありましたので、現時点で最も新しい物を準備しました。
- Plamo Linux では installer で起動した段階でも sshd が起動していました。qemu-kvm で起動している Plamo Linux の中に入られるように、'hostfwd=tcp::2222-:22' を追加しています。cmd.exe から
ssh -p 2222 plamo@localhost
で login できます。 - Windows 版の Remote Viewer で SPICE で接続できました。
spice://localhost:5900
で OK です。これ以降の screen shot は Remote Viewer で記録したものです。
起動用 script :
WSL2-distrod Ubuntu bash :
$ cd ~/qemu_vm/plamo $ kvm -m 8G -smp 4 \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \ -drive if=pflash,format=raw,file=OVMF_VARS.fd \ -drive file=PlamoLinux.qcow2,if=virtio \ -net nic,model=virtio -net user,hostfwd=tcp::2222-:22 \ -machine vmport=off \ -vga qxl \ -spice port=5900,disable-ticketing=on \ -drive file=/mnt/e/ISO/plamo-7.4_x86_64_2021-12-09_usb.iso,media=cdrom \ -boot c \ -monitor stdio
- 追加で DVD から package を入れようと '-cdrom' option を付けると此方から起動してしまうので、代わりに '-drive … ,media=cdrom' で接続して mount する様に変更しました。/dev/cdrom で mount できます。
- ssh 及び SPICE については install の時と同様です。
install 手順
ググっても Plamo の install 画面は Web 上であまり見つからなかったので screen shot で説明しながら進めます。昔ながらの ncurses を使用した setup 画面なので、懐かしく感じます。それでも日本語表示なので分かりやすいです。
新しめの Plamo Linux は GPT 環境にも install できるようですので、GPT 環境で install する事にしました。
boot直後 : grub version 2 なので GPT で起動している模様。最初の項目を選択して enter。
起動 : 起動には少し時間がかかります。prompt 表示には、上部に日本語で記載の通り、user : root、password : root で login して setup を実行します。
setup 実行 : 私は英語配列なので KEYMAP の変更は不要です。上下キーでカーソルを移動できます。
cfdisk選択 : 3番目の 'cfdisk' を選択して enter を押します。
HDD の選択 : 仮想マシンなので '/dev/vda' を選択します。GPT なディスクの場合は EFI システムパーティションを作成するように注意書きがあります。
ラベルタイプを選択 : gpt を選択します。
cfdisk 起動直後 : 選択した '/dev/vda' は全て空き領域なので、「新規作成」を選択して順次パーティションを作成します。
EFI システムパーティション : ESP 領域としてパーティションのサイズ 128M を指定しました。
ESP領域のタイプの変更 : 元の画面に戻り、128MB の領域が '/dev/vda1' として確保されています。しかし、タイプが 'Linux ファイルシステム' となっていますので、上下キーで '/dev/vda1' を選択し、左右キーで下部の「タイプ」を選択して enter を押します。
パーティションタイプを選択 : 一番上の 'EFI システム' を選択します。
cfdisk 作成後 : 同じ手順で残りを全て 'Linux ファイルシステム' で作成しました。
現段階では重い処理をさせる予定はありませんので、swap は作成しませんでした。
この後、[書き込み] -> [終了] の順に選択して仮想 HDD に partition 情報を書き込みます。その後、Setup 初期画面に戻ります。
ここで、一旦 setup を終了して ESP 領域を format しました。
qemu-kvm Plamo installer bash :
# mkfs.vfat -F32 -s2 /dev/vda1
Plamo Linux 7.4では必要ないかも知れません。
第78回 Plamo LinuxのGPT/UEFI対応[その2]:玩式草子─ソフトウェアとたわむれる日々|gihyo.jp … 技術評論社
Setup 初期画面 で install 選択 : もう一度 setup を起動し、4番目の 'install' を選択して enter を押します。
installation menu : 先にも書きましたが英語配列なので KEYMAP の変更はなし、swap も使用しませんので ADDSWAP も選択しませんでした。
TARGET を選択 : 4番目の 'TARGET' を選択して enter を押します。
root partition の選択 : 表示されている中から '/dev/vda2' を選択します。
Format partition : 昔は HDD の check の為に 'Check' を選んでいましたが時間がかかり過ぎるので、今回は 'Format' を選択しました。
Select FS : ファイルシステムには ext4 を選択しました。拘りがあれば btrfs でも xfs でも良いと思います。
SOURCE の選択 : インストール元を選択します。
Select install media : 今回は ISO image から boot して RAM上で installer が起動している状態です。DVD-ROM は /dev/sr0 に接続されていますので、'DVD-ROM' を選択します。download した iso image は USB media 用ですが、qemu への接続は cdrom (iso) ですので DVD-ROM からで OK です。
Found DVD device : DVD-ROM が /dev/sr0 に見つかったというメッセージです。
Select install method : デフォルトディレクトリ(/cdrom/plamo) からインストールを選択します。
カテゴリ選択に進む? : 'はい' を選択します。
カテゴリ選択 : 上下キーで合わせてスペースキーでチェックを ON/OFF できます。
標準では minimum と devel と libs が check されていますが、最小構成という事で minimum のみを選択しました。実際には 00_base と 01_minimum が install されます。(これが原因で少し嵌ることに...)
インストールに進むかの確認 : 「はい」を選択します。
カテゴリ単位でパッケージを選択するか? : RECOM を選択し、カテゴリ単位で全てをインストールします。EXPERT で個々のパッケージを選択するのは Plamo のパッケージについての知識があれば良いですが、久し振りなので RECOM を選びました。
システム設定の説明 : 「はい」を選択します。
grub install : system boot に grub が必要ですので「はい」を選択します。
timezone : JST でよいので「はい」を選択します。
最終調整前のメッセージ : 確認して「了解」を選択します。
hostname : LAN 内なら標準でも良いかと思います。私は 'plamo' にしました。
network : LAN 内に dhcpd があれば 'DHCP' を選択します。
root の password の設定 : 画面がずれて表示されていますが、root 用の password を設定します。Plamo Linux では一般ユーザーは installer で作成されません。後で自分で作成します。
install 終了 :
再起動して、起動用の script で起動すれば Plamo Linux 7.4 が起動できました。
ちょっとした不具合と tips
Plamo Linux 7.4 を minimum のみで install する事を誰もやっていなかったのでしょうか、ちょっとした不具合がありました。また、他の distribution とは違い、初期の設定から自分で行わなければならないので、備忘録として残しておきます。
get_pkginfo が使えない
/usr/bin/get_pkginfo は python の script ですが、行頭で #!/usr/bin/python
と version なしの python が指定されています。Plamo Linux の標準は Python3 で /usr/bin/python
の link は python3 ですが、minimum には Python2 までしか含まれていないので、get_pkginfo が起動できませんでした。
iso image を /mnt に mount して、
qemu-kvm Plamo bash :
# installpkg /mnt/plamo/02_devel/Python-3.9.6-x86_64-B1.txz
と Python3 を install すれば解決しました。
これで、get_pkginfo で package を update する事ができました。
$ sudo get_pkginfo -a
installpkg で error message
installpkg command を実行すると以下の error が出ていました。
qemu-kvm Plamo bash :
# installpkg processing [ kmod ] ... mv: can't rename 'plamo-default.conf.dist': No such file or directory
installpkg command は shell script で、追っかけてみると /var/log/initpkg/kmod
でこの error message が出ていました。
# cat /var/log/initpkg/kmod #%% begin initialize if [ ! -f /etc/modprobe.d/plamo-default.conf ]; then ( cd /etc/modprobe.d ; mv plamo-default.conf.dist plamo-default.conf ) fi #%% end
/etc/modprobe.d/plamo-default.conf.dist
が存在していなかった為に mv できない状態でした。module に関する設定は必要ないと思いますので、空ファイルを作成して回避しました。
# touch /etc/modprobe.d/plamo-default.conf
一般ユーザー登録
最近やってないので忘れていました。
# useradd -m hiro # passwd hiro
'-m' option は home directory を作る option です。
sudo の設定
# visudo -f /etc/sudoers.d/hiro $ sudo cat /etc/sudoers.d/hiro hiro ALL=(ALL) ALL
wheel group に入れるのが通常の方法でしょうが、一人の環境なので簡単に済ませました。
最小構成で install した partition から tar ball を作成する
最小構成で install した Plamo Linux を get_pkginfo -a
で最新版にした状態で、tar ball でまとめてみます。
qemu-kvm debian で Plamo Linux root fs を mount
Plamo Linux を起動していない状態で tar ball を作成したいので、以前に install していた debian を利用します。
$ tree . ├── install.sh └── qemu_vm ├── debian │ ├── Debian11_UEFI.qcow2 │ ├── Debian_UEFI_boot.sh │ ├── Debian_UEFI_install.sh │ └── OVMF_VARS.fd └── plamo ├── OVMF_VARS.fd └── PlamoLinux.qcow2 3 directories, 7 files $ cd qemu_vm/debian $ cat Debian_UEFI_boot.sh kvm -m 8G -smp 4 \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \ -drive if=pflash,format=raw,file=OVMF_VARS.fd \ -drive file=Debian11_UEFI.qcow2,if=virtio \ -drive file=../plamo/PlamoLinux.qcow2,if=virtio \ -net nic,model=virtio -net user,hostfwd=tcp::2222-:22 \ -machine vmport=off \ -vga qxl \ -spice port=5900,disable-ticketing=on \ -boot c \ -monitor stdio $ ./Debian_UEFI_boot.sh
起動した debian で Plamo Linux の root fs を mount して tar ball を作成します。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk vda 254:0 0 64G 0 disk |-vda1 254:1 0 512M 0 part /boot/efi |-vda2 254:2 0 62.5G 0 part / `-vda3 254:3 0 976M 0 part [SWAP] vdb 254:16 0 32G 0 disk |-vdb1 254:17 0 256M 0 part `-vdb2 254:18 0 31.7G 0 part # /dev/vdb2 が Plamo Linux の root fs $ sudo mount /dev/vdb2 /mnt $ cd /mnt $ sudo tar -Jcvf /home/hiro/plamo.tar.xz . $ ls -l ~/plamo* -rw-r--r-- 1 root root 707745020 Mar 13 22:59 /home/hiro/plamo.tar.xz
tar ball を WSL2 へ import
出来た plamo.tar.xz を Windows 側に copy します。scp を使用しました。
cmd.exe :
C:\Users\hiro\Documents\WSL2_VMs>scp -P 2222 hiro@localhost:~/plamo.tar.xz . hiro@localhost's password: plamo.tar.xz 100% 675MB 18.7MB/s 00:36
tar.xz -> tar に解凍します。
$ cd /mnt/c/Users/hiro/Documents/WSL2_VMs $ xz -dv ./plamo.tar.xz ./plamo.tar.xz (1/1) 100 % 674.9 MiB / 2,033.3 MiB = 0.332 37 MiB/s 0:54 $ ls -l *tar -rwxrwxrwx 1 root root 1359134720 3月 4 19:58 Ubuntu-20.04.tar -rwxrwxrwx 1 root root 2132049920 3月 13 22:23 plamo.tar
解凍後の状態で WSL2 Ubuntu から export した Ubuntu-20.04.tar と比較すると、plamo.tar がかなり大きい状態でした。不要な package を削ればもっと小さくなると思います。
これを wsl -import
で読み込めば WSL2 で Plano Linux が使用出来るようになります。
cmd.exe :
C:\Users\hiro\Documents\WSL2_VMs>mkdir PlamoLinux C:\Users\hiro\Documents\WSL2_VMs>wsl --import PlamoLinux PlamoLinux plamo.tar
起動すると error が表示されます。が、WSL2 Plamo Linux は起動できました。
WSL2-distrod Plamo bash :
ファイル システムの 1 つをマウント中にエラーが発生しました。詳細については、「dmesg」を実行してください。 root@hiro-pc:/mnt/c/Users/hiro#
/etc/fstab
から root filesystem 以外の行を消去すれば、この error は出なくなります。
これで Plamo Linux を WSL2 上で使用できるようになりました。get_pkginfo や installpkg も動作します。SystemV init は起動していませんので、/etc/init.d/
以下の script を使用して daemon を起動できます。
$ sudo /etc/init.d/sshd start * Starting SSH Server... [ OK ]
これで実用上は問題なく使用できる事が確認できました。
distrobuilder を使用して tar ball を作成する
最小構成とはいえ、WSL2 には不要な kernel や module 等の package が含まれています。そこで、linuxcontainers.org の container image を作成する command である distrobuilder を使用して tar ball を作成し、WSL2 に import してみました。
上記を参考にしましたが、plamo 用の container を作成する部分には不具合がありましたので、修正しながら作業を進めました。
debian 仮想マシンの準備
先程使用した debian 仮想マシンを再利用しました。この debian の中に
- debootstrap
- golang
を install します。
qemu-kvm debian bash :
$ sudo apt install debootstrap golang
distrobuilder の download, make
github から distrobuilder を download し make します。
qemu-kvm debian bash :
$ go get -v -x github.com/lxc/distrobuilder/distrobuilder
~/go
以下に芋蔓式に依存 package が download されます。
$ tree -d -L 3 go/src go/src ├── github.com ... 略 ... │ ├── lxc │ │ ├── distrobuilder │ │ └── lxd ... 略 ...
実際の distrobuilder の source directory は ~/go/src/github.com/lxc/distrobuilder
になります。その directory で make を実行します。
qemu-kvm debian bash :
$ cd go/src/github.com/lxc/distrobuilder $ make gofmt -s -w . go install -v ./... github.com/lxc/distrobuilder/sources github.com/lxc/distrobuilder/distrobuilder distrobuilder built successfully
~/go/bin
に distrobuilder の実行ファイルが作成されます。
Ubuntu の container の作成
先ずは練習がてら ubuntu の lxc-container を作成してみます。container の作成条件の yaml ファイルは github から入手します。
qemu-kvm debian bash :
$ cd ~/go/bin $ mkdir ubuntu-lxc $ cd ubuntu-lxc $ wget https://raw.githubusercontent.com/lxc/distrobuilder/master/doc/examples/ubuntu.yaml $ sudo ../distrobuilder build-lxc ubuntu.yaml ...略... $ LANG=C ls -l total 101356 -rw-r--r-- 1 root root 768 Mar 23 21:00 meta.tar.xz -rw-r--r-- 1 root root 103772540 Mar 23 21:00 rootfs.tar.xz -rw-r--r-- 1 hiro hiro 6017 Mar 23 20:53 ubuntu.yaml
rootfs.tar.xz
が root filesystem の archive になります。
Plamo Linux の container の作成
次に本題の Plamo Linux の lxc-container を作成します。distrobuilder では Plamo Linux の pkgtools8 package を /tmp
以下に展開して script 内部を書き換えて使用するので、debian 上でも Plamo Linux の container を作成する事が出来ます。
plamolinux-http.go への patch
plamolinux-http.go は distrobuilder 内部で Plamo Linux の package を download、install する部分です。distrobuilder/sources/
にあります。この directory には、distribution 毎の download、install する部分が保存されています。
以下の理由で plamolinux-http.go へ patch を当てます。
- 00_base と 01_minimum の両方を install する
- ignorePkgs を追加する
- 01_minimum 内の network.txz directory 以下の package を処理すると、それ以降の 01_minimum 直下の package が処理されない (おそらく bug でしょう)
ignorePkgs は、本来なら container 作成条件の yaml ファイルで指定 (remove) できるはずなのですが、plamolinux.yaml に指定しても機能しませんでした(ubuntu.yaml では機能する)。その為、plamolinux-http.go を書き換える事にしました。emacs 類を含んでいるのは私が使用しない為です。
plamolinux-http.go.patch :
--- go/src/github.com/lxc/distrobuilder/sources/plamolinux-http.go.orig 2022-03-22 18:11:20.885034611 +0900 +++ go/src/github.com/lxc/distrobuilder/sources/plamolinux-http.go 2022-03-23 10:51:29.527234436 +0900 @@ -37,12 +37,11 @@ s.definition.Image.ArchitectureMapped, "plamo") paths := []string{path.Join(mirrorPath, "00_base")} + paths = append(paths, path.Join(mirrorPath, "01_minimum")) ignoredPkgs := []string{"alsa_utils", "grub", "kernel", "lilo", "linux_firmware", "microcode_ctl", - "linux_firmwares", "cpufreqd", "cpufrequtils", "gpm", "ntp", "kmod", "kmscon"} - - if release < 7 { - paths = append(paths, path.Join(mirrorPath, "01_minimum")) - } + "linux_firmwares", "cpufreqd", "cpufrequtils", "gpm", "ntp", "kmod", "kmscon", + "kernel_211209", "kernel_220310", "microcode_intel", "emacs_mini", "emacs_lib", "emacs_bin", + "wireless_tools", "wpa_supplicant", "lm_sensors"} var pkgDir string @@ -170,7 +169,10 @@ u.Path = path.Join(u.Path, target) - return s.downloadFiles(def, u.String(), ignoredPkgs) + dir, err = s.downloadFiles(def, u.String(), ignoredPkgs) + if err != nil { + return "", fmt.Errorf("Failed to download packages: %w", err) + } } }
この patch を当てた上で distrobuilder を作り直します。作り直す方法はこのページ上部を参照ください。
plamo.yaml への patch
Plamo Linux 用の container 作成用 yaml は github にあります。
$ wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/plamo.yaml
ubuntu の時とは異なり、この yaml ファイルをそのまま使用しただけでは Plamo Linux の container は作成できません。release を追加する必要があります。
--- go/bin/plamo-lxc/plamo.yaml.orig 2022-03-22 18:15:04.092814303 +0900 +++ go/bin/plamo-lxc/plamo.yaml 2022-03-22 20:40:18.814475183 +0900 @@ -1,5 +1,6 @@ image: distribution: plamolinux + release: 7.x source: downloader: plamolinux-http
container の作成
これで Plamo Linux の container を作成する事が出来ます。patch を当てて distrobuilder を作り直してから、以下の command を実行します。
$ cd ~/go/bin $ mkdir plamo-lxc $ cd plamo-lxc $ wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/plamo.yaml $ cat plamo.yaml.patch | patch $ sudo ../distrobuilder build-lxc plamo.yaml $ LANG=C ls -l -rw-r--r-- 1 root root 828 Mar 23 10:43 meta.tar.xz -rw-r--r-- 1 hiro hiro 9159 Mar 23 22:47 plamo.yaml -rw-r--r-- 1 root root 190567464 Mar 23 10:43 rootfs.tar.xz
Plamo Linux の container を WSL2 へ import
出来た rootfs.tar.xz を WSL2 への import します。手順については上で書いた方法と同様です。
不具合への対処
幾つか不具合が残っていますので対処します。
/var/log/initpkg に script が残る
container 作成中に installpkg 内で doinst.sh は実行されているので残らないはずなのですが、/var/log/initpkg 以下に script が残っていました。
WSL-distrod Plamo bash :
# ( cd /var/log/initpkg && ls ) ca_certificate dcron hostapd linux_pam mdadm pkgtools8 sudo cracklib glibc iputils logrotate nfs_utils rsyslog tcpwrappers
それぞれ実行してから /var/log/scripts へ名前を変えて移動します。順番としては、
- glibc
- pkgtools8
- その他
特に pkgtools8 の script は installpkg 等の名称を変更するので必須です。
簡単な bash script で一括処理します。
do_initpkg.sh : WSL2-distrod Plamo bash で root で実行
#/bin/bash INITPKGDIR="/var/log/initpkg" SCRIPTDIR="/var/log/scripts" ADDEXT="_2" if [ -e $INITPKGDIR/glibc ]; then echo "sh $INITPKGDIR/glibc" sh $INITPKGDIR/glibc echo "mv $INITPKGDIR/glibc $SCRIPTDIR/glibc$ADDEXT" mv $INITPKGDIR/glibc $SCRIPTDIR/glibc$ADDEXT fi if [ -e $INITPKGDIR/pkgtools8 ]; then echo "sh $INITPKGDIR/pkgtools8" sh $INITPKGDIR/pkgtools8 echo "mv $INITPKGDIR/pkgtools8 $SCRIPTDIR/pkgtools8$ADDEXT" mv $INITPKGDIR/pkgtools8 $SCRIPTDIR/pkgtools8$ADDEXT fi for INITFILE in `ls $INITPKGDIR` do echo "sh $INITPKGDIR/$INITFILE" sh $INITPKGDIR/$INITFILE echo "mv $INITPKGDIR/$INITFILE $SCRIPTDIR/$INITFILE$ADDEXT" mv $INITPKGDIR/$INITFILE $SCRIPTDIR/$INITFILE$ADDEXT done
get_pkginfo 用に Python3 の install
wget が使えますので、download して installpkg で install します。Plamo Linux の repository から download します。Python3 の Version は変わりますので注意が必要です。
# wget https://repository.plamolinux.org/pub/linux/Plamo/Plamo-7.x/x86_64/plamo/02_devel/Python-3.9.12-x86_64-B1.tzst # installpkg Python-3.9.12-x86_64-B1.tzst Installing Python-3.9.12-x86_64-B1... PACKAGE DESCRIPTION: Executing install script of Python-3.9.12-x86_64-B1 /sbin/ldconfig: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
最後の ldconfig の message は WSL2 に関する事なので Plamo Linux とは無関係です。
get_pkginfo の除外 package の設定
distrobuilder の plamolinux-http.go の ignorePkgs に指定した package を get_pkginfo から除外するように設定します。/usr/share/doc/get_pkginfo-3.3/README.md.gz 内に記載がありますが、
- ~/.pkginfo
- /etc/pkginfo.conf
のどちらかに LOCALBLOCK と CATEGORY を追加します。
/etc/pkginfo.conf :
LOCALBLOCK = "alsa_utils grub kernel lilo linux_firmware microcode_ctl linux_firmwares cpufreqd cpufrequtils gpm ntp kmod kmscon kernel_211209 kernel_220310 microcode_intel emacs_mini emacs_lib emacs_bin wireless_tools wpa_supplicant lm_sensors" CATEGORY = 00_base 01_minimum
これで、予め除外していた package が get_pkginfo で追加で install される事は無くなりました。
WSL2 へ Plamo Linux install 完了
distrobuilder を使用して、一部の不具合に対処する事により、
- 00_base と 01_minimum + Python3
- pkgtools8 が使える
- get_pkginfo が使える
という状態の WSL2 Plamo Linux が使用できるようになりました。
cmd.com :
>dir *.tar 2022/03/13 23:06 2,131,886,080 plamo.tar 2022/03/23 10:56 800,563,200 plamo_distrobuilder.tar 2022/03/04 19:58 1,359,134,720 Ubuntu-20.04.tar
distrobuilder で作成した tar ball は、仮想マシンに最小構成で install した tar ball と比較して半分以下、WSL2 から export した Ubuntu と比較しても 6割程度の大きさでした。
まとめ
始めは distrod で install できる Plamo Linux の container が実用的ではない事を発端として始めましたが、distrobuilder の Plamo Linux の container 作成で嵌ってしまい時間を要してしまいました。
以下の2種類の方法で WSL2 上で Plamo を使用する事が出来ました。
- 仮想マシンに Plamo Linux を最小 install し、別の 仮想マシン debian から rootfs を mount、tar ball を作成して WSL2 に import
- 仮想マシン debian に distrobuilder を install し、Plamo Linux の lxc-container を作成 (要 patch)、WSL2 に import
別の Linux 環境が必要ですが、2番目の方法の方が WSL2 に不要な package を install せずに済みますので、tar ball が小さく出来ます。
distrobuilder の patch について、私は golang については経験がありませんので正しい方法なのかどうか分かりませんが、とりあえず考えた通りに動作しています。container 作成条件の yaml ファイルの package remove が機能しなかった事については、原因を掴むことが出来なかったのは残念でした。
とはいえ、当初の目的通りに WSL2 で Plamo Linux を動作させる事が出来ました。参考になれば幸いです。