archlinux インストール時のメモ(イメージ作成は途中まで)

 

ahchlinuxを試してみました.そのときのメモです.

 

参考にしたページは下記.

 

neko-mac.blogspot.com

 

zenn.dev

wiki.archlinux.org

 

www.kaias1jp.com

 

isoイメージをダウンロードして仮想環境にインストールすることとしました.

isoイメージから起動すると自動ログインがされて,プロンプトが表示されます.(自分の使っていた仮想環境では,たまにプロンプト表示まで行かないことがありました.起動時のロゴが表示->起動プロセスの表示がされた後,画面が暗くなり止まる.理由はわからないのですが,再起動すると表示まで行きました.)

 

インストールの流れですが,他のディストリビューション?の場合と違い,

●プロンプトが表示されたあとに,ディスクのパーティションを作る,マウントする.pacstrapコマンドで,必要なパッケージをマウントしたディスクに入れる.
chrootコマンドを使い,マウントしたディスク上で必要な作業する.
ブートローダの設定をする(今回はsyslinuxを使用)

上記で紹介した参考ページのとおりでほぼできるのですが,自分の場合は下記で進めました.

・fdiskでパーティションの設定するとブートローダの設定でエラーする.gdiskでパーティションをやり直すとうまくいった.

ext4をマウントしようとしてら,うまくいかなかった(mount: unknown filesystem type 'ext4'と表示される).btrfs を使うこととし,フォーマットもmkfs.btrfs のコマンドを使うとうまくいった.

・マウント後,pacstrap /mnt base ...に続けて好きなパッケージをインストールする.


・「arch-chroot /mnt」でインストール先と同じ環境に移り,必要な設定をする. root パスワードの設定も忘れない.

ここでpacman コマンドを使ってインストールすることもできる.日本語表示を試したかったので,kmscon,ttf-dejavu ,otf-ipafontを入れる(後で試したところ動作した).

日本語化する際,下記の設定をする.
/etc/pam.d/loginのファイル内で,下記をコメント化
#auth       required     pam_securetty.so

日本語の動作確認をするために,w3mをインストールしてもよい.(kmsconなどがインストールができていれば,コマンドラインでkmsconと入れるとログインプロンプトが表示され,日本語環境になる.そのあとにw3mで日本語表示の確認をする等..)


ブートローダとして,syslinuxを使うことにしたので,syslinuxとsyslinuxが使うgptfdiskもpacmanでインストール.

pacman -S syslinux gptfdisk

/boot/syslinux/内のsyslinux.cfgファイル内では,rootとして起動するパーティションの記述が違う場合があるので,適宜修正する.

syslinuxをインストールするコマンドは,
syslinux-install_update -i -a -m
これでブートの処理が行われる.もしエラーが表示されたら対処する.
問題なければ,isoをブートから外して,ディスクから起動できるようにして再起動.
(※あとはネットワークの設定が必要)

再起動後,問題があれば,再度isoからブート,適宜chrootコマンドで設定しなおす,syslinux.cfgで起動パーティションが違っていないか確認するなど,,,で,できるはず.

 

おまけ1:
ライブCDの作成のためにarchisoも試しましたがうまくいかず(追加検証していません).基本的な手順ですが,
pacman -S archiso
でインストールしたあと,/usr/share/archiso/configs/内を変更して,使いたいパッケージを選ぶ.

次のコマンドで,isoが作成.※ただし,作業用にディスク容量が多く必要なので注意する.

mkarchiso -v -w (/path/to/work_dir) -o (/path/to/out_dir)  (/path/to/profile/)


32bit版で作りたかったのですが,32bit版のままデフォルトでコマンドを実行するとエラーする(64bitのイメージを使おうとするため).32bitに対応させるためには,mkarchisoのスクリプトを直接書き換える(ファイル名がbootx64になっているところを,bootia32に書き換えるなど.何か所かある).

以上で,isoファイルは作成されたのですが,途中でパーティション関連のエラー?が出て,起動はできず..

 

おまけ2:
virtual x86で動作させるためのイメージも作成してみましたがこれもうまくいかず.
イメージの作成まではできましたが,起動しませんでした...(以降,できなかったときのメモですので参考の際には注意ください)

 

github.com

https://github.com/copy/v86/blob/master/docs/archlinux.md
にある要領でイメージ作成をしてみました.そのときのメモを示すと,,,

全体のおおまかな流れとしては,
 ・ツールの準備をする(事前に準備するツールは後述)
  ・template.json のファイルの準備(※ページに従って作成)
 ・provision.shのファイルの準備
  ・build.shのファイルの準備
・build.shの実行.実行すると,packerがtemplate.jsonの記述に基づいてisoファイルのダウンロードを始める.準備が整うとqemuを起動して,provision.shの内容が実行されます.build.shのpackerの処理を終えたあとは,9pファイルシステムのための準備などが行われます.

 

事前に用意するツールとしては,packer,python3,kpartx,qemuqemu-system)をが必要.また,

https://github.com/copy/v86/tree/master/tools


にある.fs2json.py,copy-to-sha256.pyも用意して,toolsディレクトリの下の用意をしておく.スクリプト内をよく読んで,ファイルやディレクトリの位置(下記)などを確認する.
・build.shを置いた同じディレクトリにtoolsとpackerのディレクトリを準備.
・packerディレクトリの下にtemplate.jsonを準備.
・packer/scripts/の下にprovision.shを準備.

・・・しておきます.


自分の場合は,packerからのイメージ作成でトラブルが何度かあったので,build.shを編集して,「packerが終えるところ」と「それ以降の作業」を分けました.(packerの実行だけを何度かやり直すようにしました)

 

注意点やホームページの説明と違う点は:

●template.jsonについて
自分の環境と合わないところを修正.仮想環境内で試していたため,
qemukvmのオプションは外しました("accelerator": "kvm",を削除).
・iso_checksum_typeの行でエラーするので,これも一旦削除.
・自分の場合は,途中でdisk_sizeが足りなくなったので,1500から増やしました(1500は1.5GBの意味と思われる).

https://github.com/copy/v86/blob/master/docs/archlinux.md
にあるtemplate.jsonでは

"boot_command": [
        "<enter><wait30><enteropenssl passwd help<wait10>",
となっていますが,間違い?のようですので(タグが足りない?書き間違い?),該当部分は削除しました.

・仮想環境内で試していたため,isoからの起動が遅いらしく,boot_waitの値は多めにしないとならない(boot_waitが小さいと,起動ができていないときにsshで自動ログインするらしく,スクリプト内からsshへログインができない,というエラーが出る).自分の場合は5分以上にするとうまくいきました.(qemu内での起動に5分以上かかっているらしい・・)


●provision.shについて
pacstrap -i /mnt base linux dhcpcd curl openssh --noconfirm
の行では,自分でいれたいパッケージを追加する.openssh-clientをインストールすると「sftp」が使えるので,作成したイメージの取り出しに便利です.

 

build.sh内で,packer終了後,
packer/output-qemu/にファイル名「archlinux」のイメージができているかを確認する(archlinuxは巨大なファイルです).ファイルがあればOK.ただし,build.shの最後のほうの命令で,mvされてしまうので,注意(必要に応じでbuild.shを読んで適宜修正するとよさそう,mvじゃなくてcpにするとか).
同じくpacker終了後は,losetupコマンドが実行される.build.shのスクリプト実行前に
losetup -f で
/dev/loop0
などと表示がされるか事前に確認するとよい(自分の場合は表示がされなかったので環境を変えてやり直しました.)


他,packer実行時やbuild.sh実行時に,エラーが出ているようだったら,それを適宜潰していく.(途中,データのダウンロードがきちんとできておらず,正しくイメージができていないときがありました)

 

build.sh実行後は,
・/output/images/arch/のフォルダの下に複数の.binファイル
・/output/images/fs.jsonのファイル
ができてるはずなので,これを利用する.

.binファイル,fs.jsonファイルと,v86用のjavascriptを使って,ウェブからarchlinuxが起動できるはず・・・と思ってjavascriptを準備して実行したのですが,なんとか起動画面は動き出すものの,途中で止まってしまいました(できたことはここまで).何度か試しましたが,起動や動作が遅いだけでトラブルでは無い?感じに見えましたが・・・

なお,上記のページ
https://github.com/copy/v86/blob/master/docs/archlinux.md
の手順に従うと,

・archフォルダ内の複数の.binファイルか,
qemuのイメージファイル

かのいずれかを指定して,実行時に必要なデータを順次読みだして実行する,ようです.(個人的には)今回作成したイメージは,archフォルダ内のファイルが合計1.5Gで,qemuのイメージで2GB,と,ずいぶんとディスクサイズが大きく,運用が難しそうです.以前に作成したbuildrootのイメージは10MBとコンパクトです.

 

 

 

 

buidlroot 設定,さらに続き

random: crng init doneのメッセージが頻繁に出てしまうことについて,前の記事では,make menuconfig実行後のメニュー内,Miscellaneousにhavegedの選択があり,それを選択すればよい,としていました.

ですが,起動時に遅れて一回は「random:crng init done」のメッセージは出てしまいます(ログイン後に表示される場合がある).調べたところ,下記の設定(CONFIG_RANDOM_TRUST_CPU=y )を記述することでも解決しました.(下記は,buildroot-v86/board/v86/linux.config内の記述.make menuconfigやmake linuxconfigを実行すると上書きされるかもしれません(<未検証です))

f:id:l-expanse:20220211233737p:plain
下記のようになります.

f:id:l-expanse:20220211233843p:plain

 

下のページを参考にしました.

B忘log - Hi-LoのBlog: "random: crng init done"で時間がかかる。"random: crng init done" took too long during boot - solved.

 

ただ,make linux-menuconfigを見直したところ,下記の選択(Trust the CPU manufacturer to initialize Linux's CRNG)があったので,そもそも,ここの選択で解決できたのかもしれません・・・(ここも未検証です)

f:id:l-expanse:20220211234013p:plain


もうひとつ.bash終了(ログアウト時)に下記のメッセージ(bash .... used greatest stack depth...)が表示されてしまう.特に問題が無いが,エラーみたいに見えるので消せるなら消したい.

f:id:l-expanse:20220211234214p:plain

make linux-menuconfig内で,Memory Debugging 内にstackに関連するオプションがオンになっていた.選択しないことで,いまのところメッセージは出ていません.

 

f:id:l-expanse:20220211234337p:plain

 

下のページを参考にしました.

bugzilla.kernel.org

 

 

さらにもうひとつ.今の環境はなぜか,suでrootになったときにプロンプトが「#」にならないときがある./root/.bashrcを作って「export PS1="# "」として対応したが,これでよいのかは心配...