こんにちは、山田ハヤオです。最近は全く時間がなくてLinuxに触れていません。
メインPCのArch LinuxもGentooも、システムが壊れたまま放置しています。
そんなわけで今回は放置しても安定して動くUbuntuの中にコンテナとしてArch Linux環境を構築します。最終的にはコンテナからVSCodeを起動させ、コンテナ内で開発作業を完結させます。
使用技術
恒久的なコンテナにするので、Dockerでは不向きです。
そこで、今回はchrootの最強版であるsystemd-nspawnを使っていきます。
以前に少し触れたときは恒久的な利用を想定していなかったのですが、今回はmachinectlでの管理まで想定して構築します。
最終的には
machinectl start user@arch
でコンテナ環境にログインできるようになります。
インストール準備
systemd-nspawnをインストール
sudo apt install -y systemd-container wget arch-install-scripts
Ubuntuではデフォルトではnspawnは入ってないみたいです。
ディレクトリ作成
mkdir -p /var/lib/machines/
cd /var/lib/machines/
machinectlで管理するために/var/lib/machines/以下のディレクトリにインストールします。
インストール作業
tarballをダウンロードして展開
cd /var/lib/machines/
sudo wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2022.12.01/archlinux-bootstrap-x86_64.tar.gz
sudo tar xvf archlinux-bootstrap-x86_64.tar.gz --numeric-owner
sudo mv root.x86_64 arch
sudo rm -f archlinux-bootstrap-x86_64.tar.gz
これで今/var/lib/machines/archにArch Linuxのrootfsが展開されたはずです。
この作業はArch Linuxの通常のインストールでのpacstrapに該当します。
machinectlの設定
ディレクトリを作成。
sudo mkdir -p /etc/systemd/nspawn
設定ファイルを作成します。
sudo nano /etc/systemd/nspawn/arch.nspawn
エディタが起動したら以下の内容を貼り付けてください。
[Exec]
Boot=yes
PrivateUsers=no
NotifyReady=true
# Xorg
Environment=DISPLAY=:0
Environment=XAUTHORITY=~/.Xauthority
Environment=PULSE_SERVER=unix:/run/user/host/pulse/native
[Files]
# Xorg
BindReadOnly=/tmp/.X11-unix/
BindReadOnly=/etc/resolv.conf
Bind=/run/user/1000/pulse:/run/user/host/pulse
Bind=/dev/snd
Bind=/dev/shm
[Network]
VirtualEthernet=no
Chrootでシステムに入り設定を行う
いよいよsystemd-nspawnを用いて内部に入り設定を行います。
これ以降のコマンドはコンテナ内部で実行します。
cd /var/lib/machines/
sudo systemd-nspawn -D /var/lib/machines/arch2
パッケージマネージャの設定
まずはミラーリストを設定します。
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.org
curl -sL https://0u0.biz/YNhG | sed "s|#Server|Server|g" | tee /etc/pacman.d/mirrorlist
署名に関する設定を行います。
sudo pacman -Syy
sudo pacman-key --init
sudo pacman-key --populate
その後システム全体を更新します。その後、動作に必要な追加のパッケージをインストールします。
pacman -Syyu
sudoやnanoなどの必須のツールをインストールします。
pacman -S base base-devel nano
multilibとカラー表示を有効化します。
nano /etc/pacman.conf
でエディターを開き、以下をアンコメントしてください。
#Color
[multilib]
Include = /etc/pacman.d/mirrorlist
その後再びパッケージデータベースを更新します。
pacman -Sy
ユーザー作成
まずはRootパスワードを設定します。
passwd root
その後一般ユーザーを作成
useradd -m -U -s /bin/bash username
passwd username
sudoを設定
groupadd sudo
gpasswd -a username sudo
sed -i 's|# %sudo ALL=(ALL:ALL) ALL|%sudo ALL=(ALL:ALL) ALL|g' /etc/sudoers
ホスト名を設定
好きなようにホスト名を設定してください。
echo "YOUR-HOSTNAME" | tee /etc/hostname
コンテナを抜ける
exitコマンドを用いてログアウトしてください。
machinectlを用いてコンテナにログインする
これでArch Linuxの基本的な構築は終わりました。
これ以降は普通のArchと同じように設定を行えます。
machinectlを用いてログインするには以下のようにします。
sudo machinectl start arch
sudo machinectl shell username@arch
コンテナの自動起動
sudo systemctl enable systemd-nspawn@arch
これで上の1行目を実行する必要がなくなりました。環境構築お疲れ様でした!
お好みの設定
これ以降はコンテナにあんまり関係のないお好み設定です。
Fish
pacman -S fish
sudo chsh -s /usr/bin/fish username
yay
sudo pacman -S git
git clone https://aur.archlinux.org/yaygit
cd yay/
makepkg -si
Xorg
DISPLAY環境変数を設定します。
echo 'DISPLAY=:0' | sudo tee -a /etc/environment
これでGUIアプリが動作するようになります。
VSCode
yay -S visual-studio-code-bin
終わり
システムは安定したUbuntu、開発環境はシンプルで最新のArch Linux。
この形がかなり良いのではないのかなと思い始めました。
コメント