Ubuntu上でArch Linux開発環境を構築する

ArchLinux

こんにちは、山田ハヤオです。最近は全く時間がなくて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。

この形がかなり良いのではないのかなと思い始めました。

参考サイト

systemd-nspawnとmachinectlコマンドまとめ|TechRacho by BPS株式会社
前回の記事でmachinectlコマンドを少し紹介しました。 今回はその続きとして、systemd-nspawnの管理コマンドを紹介します。 環境設定は前回作ったものと同じ想定です。 machinectlコマンド自体はsystemd-nspawn専用ではありませんが、こちらのコマンドを使って管理できます。 すべては紹介...
第491回 いまから「あえて」systemdのコンテナ機能を使ってみる | gihyo.jp
今回は、あえてsystemd-nspawnというコマンドを使い、systemdに備わっているコンテナ機能を「とりあえず」「簡単に」使う方法を紹介します。
systemd-nspawn - ArchWiki
systemd-nspawnやmachinectlで軽量システムコンテナを使う - @znz blog
systemd-nspawn やそれを使った machinectl でのノウハウがたまってきたので、何回かにわけてまとめていきたいと思います。
systemd.nspawn

コメント

タイトルとURLをコピーしました