0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LS-VL シリーズに今更 Debian 12 "Bookworm" をインストールする

0
Posted at

LinkStation (LS-VL) に Linux を入れて遊ぶことにしました。
数本のツメを折りつつ開けると、中に入っていたのは MVLSV-BA という基板。

CPU アーキテクチャは armel (ARMv5)。RAM は 128MB が 2 枚。
サポートしている OS はやはり少なく、Debian 12 "Bookworm" を入れることにしました。

思ったより面倒だったので備忘録として書き残しておきます。

armel に対応している最後のバージョンである Debian 13 "Trixie" を当初は入れようとしていたのですが、Trixie のリポジトリからはすでに armel 用の Linux カーネルが削除されています。

Trixie から Bookworm のリポジトリを参照するも依存関係エラー。
.deb を直接入れようとしたら /usr/bin のシンボリックリンクが壊れました。

非常におすすめしません。面倒です。

当初は /dev/sda2 をスワップ、/dev/sda3 をデータ領域にしていましたが、LS-VL の U-Boot は /dev/sda2 を読み込むように強制されているようです。
回避策はありますが、何かいろいろスクリプトを書かなきゃいけないようだったのでやめました。

パーティションを区切る

LS-VL に使うディスクに以下のパーティションを区切ります。
/dev/sda2, /dev/sda3 はインストーラーで区切ってもいいかもしれないです。

ブート領域: /dev/sda1

ブート領域として /dev/sda1 を作成します。
サイズは 500 MiB。ファイルシステムは ext3。

カーネルを書き込む

ここに対して、以下のファイルをダウンロードして書き込みます:

https://ftp.debian.org/debian/dists/bookworm/main/installer-armel/current/images/kirkwood/network-console/buffalo/ls-vl/initrd.buffalo
https://ftp.debian.org/debian/dists/bookworm/main/installer-armel/current/images/kirkwood/network-console/buffalo/ls-vl/uImage.buffalo

LS-VL には U-Boot というブートローダーが最初から入っており、これらのファイルを読み込むようハードコードされているらしいです。
これらのファイルは、Debian のインストーラーを U-Boot 用に変換したカーネル (uImage) と初期 RAM ディスク (initrd) です。

データ領域: /dev/sda2

データ領域として /dev/sda2 を作成します。
サイズはお好み。ファイルシステムは ext4 にしましたが、別に何でもいいと思います。

ext4 を利用する場合、万が一インストーラーのシェルで何か操作をしたいとき、modprobe ext4 を実行しないとマウントできなかったりします。

スワップ領域: /dev/sda3

スワップとして /dev/sda3 を作成します。
サイズはお好み。私の場合は 2 GiB 割り当てました。

インストールする

起動すると SSH 経由でインストールを実行できます。ユーザーは installer、パスワードは install でログインできます。

image.png

思ったより立派ですね。
なお、再起動するごとに SSH のホスト鍵が再生成されるようです。

上級者モードでインストールを進めましょう。以下に注意してください。

  • "Choose a mirror of the Debian archive" を進めている最中、Bookworm か Trixie か選択する画面が出たら、Bookworm を選択してください。
  • ベースシステムのインストール時にカーネルを選択できる場合、linux-image-marvell を選択してください。

あと何か initrd が「汎用か目的化か」と言われたので、私はとりあえず目的化にしておきました。とにかく最小限のインストールがしたかったので。

「システムを起動可能にする」のステップまで来たら実行せず、「ブートローダなしで進める」も実行せず「シェルの実行」に進んで、次の手順を行います。

Linux のカーネルを書き込む

Linux のカーネルを U-Boot 用に変換します。

/dev/sda2 に chroot する

まずはディスクをマウントします。

~ # mkdir /mnt/root /mnt/boot
~ # mount /dev/sda2 /mnt/root
~ # mount /dev/sda1 /mnt/boot

また、/dev/sda2 の中から /mnt/boot 経由で /dev/sda1 にアクセスできるようにもしておきます。

~ # mkdir /mnt/root/mnt/boot
~ # mount --bind /mnt/boot /mnt/root/mnt/boot

chroot 内で支障がないようにいろいろマウントします。

~ # mount --bind /dev /mnt/root/dev
~ # mount --bind /proc /mnt/root/proc
~ # mount --bind /sys /mnt/root/sys
~ # mount --bind /dev/pts /mnt/root/dev/pts

その後、/dev/sda3 の中に入ります。

~ # chroot /mnt/root /bin/bash
root@debian:/#

カーネルを /boot に書き込む

apt update をして、linux-image-marvellu-boot-toolsinitramfs-tools を入れます。もう入っていると嬉しいですね(適当)。

root@debian:/# apt update
root@debian:/# apt install linux-image-marvell u-boot-tools initramfs-tools

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
linux-image-marvell はすでに最新バージョン (6.1.176-1) です。
u-boot-tools はすでに最新バージョン (2023.01+dfsg-2+deb12u3) です。
u-boot-tools は手動でインストールしたと設定されました。
initramfs-tools はすでに最新バージョン (0.142+deb12u3) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

カーネルのバージョンを見ます。

root@debian:/# ls /boot/
System.map-6.1.0-50-marvell
initrd.img
initrd.img.old
vmlinuz-6.1.0-50-marvell
config-6.1.0-50-marvell

root@debian:/# KVER=$(ls /boot/vmlinuz-* | sed 's#/boot/vmlinuz-##' | tail -n 1)
root@debian:/# echo $KVER
6.1.0-50-marvell

uImage.buffalo と initrd.buffalo を作って /dev/sda1 へ書き込みます。

しかしここで重要なこととして、DTB と呼ばれる、基盤上にあるチップの位置データのようなものカーネルにくっつける必要があります。
vmlinuz という圧縮された Linux カーネルに DTB ファイルを cat でくっつけます。

root@debian:/# cd boot
root@debian:/boot# cat vmlinuz-${KVER} /usr/lib/linux-image-${KVER}/kirkwood-linkstation-lsvl.dtb > vmlinuz-dtb

完成した vmlinuz-dtb ファイルを uImage.buffalo に変換します。

root@debian:/# mkimage -A arm -O linux -T kernel -C none -a 0x01a00000 -e 0x01a00000 -n "Debian Kernel" -d vmlinuz-dtb /mnt/boot/uImage.buffalo

また、initrd.img も initrd.buffalo に変換します。

root@debian:/# mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n "Debian Initrd" -d /boot/initrd.img-6.1.0-50-marvell /mnt/boot/initrd.buffalo

しれっと Load Address (-a) と Entry Point (-e) を指定しています。これは、Debian のインストーラーのものと同一です。
これを指定しないと動作しないので気を付けてください(1敗)。

root@debian:/mnt/boot# mkimage -l uImage.buffalo
Image Name:   Debian kernel
Created:      Tue Jul  7 03:34:10 2026
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2656891 Bytes = 2594.62 KiB = 2.53 MiB
Load Address: 01a00000
Entry Point:  01a00000
root@debian:/mnt/boot# mkimage -l initrd.buffalo
Image Name:   debian-installer ramdisk
Created:      Tue Jul  7 03:34:10 2026
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    12324548 Bytes = 12035.69 KiB = 11.75 MiB
Load Address: 00000000
Entry Point:  00000000

PermitRootLogin yes にする(1敗)

設定手順はごく単純に、/dev/sda2/etc/ssh/sshd_config を操作するだけです。
これを忘れると起動してもログインできなくなります。

root のパスワードが設定されているか確認する(1敗)

インストーラーで root のパスワードを設定したような記憶があるのですが、ログインできず調査すると /etc/shadow にパスワードが存在しませんでした。

root@debian:/# openssl passwd -6
Password:
Verifying - Password:
$6$ULzJcMjugHQIf670$hGI5Zx7hD.3h7Dk...

OpenSSL コマンドを叩き、出てきたハッシュを /etc/shadow に手動で書き込んでおきます。

/etc/shadow
root:$6$ULzJcMjugHQIf670$hGI5Zx7hD.3h7Dk...:20667:0:99999:7:::

よくわからないけどとりあえず書き込んでおきます。

再起動

完成。chroot を抜け、再起動します。

root@debian:/# ls -l /mnt/boot/*.buffalo
-rw-r--r-- 1 root root 6146469 Aug  2 22:04 /mnt/boot/initrd.buffalo
-rw-r--r-- 1 root root 2643368 Aug  2 22:04 /mnt/boot/uImage.buffalo

root@debian:/# exit
exit
~ # umount /mnt/root/dev/pts
~ # umount /mnt/root/sys
~ # umount /mnt/root/proc
~ # umount /mnt/root/dev
~ # umount /mnt/root/mnt/boot
~ # umount /mnt/boot
~ # umount /mnt/root
~ # reboot

再起動もシャットダウンもいきなり HDD への電力供給が途切れるようで、「カキューーン……」みたいな高音がして心臓に悪いです。
M.2 変換アダプタを買って SATA SSD に変えようか悩み中。

完走した感想

無事 256 MB で armel の Linux マシンが出来上がりました! これ何に使うん?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?