これまで記事にしてきた実験,特にコンピュータ実機を用いた実験では,Arch Linuxをインストールしたラップトップを使用していました.
例えばこれら↓
『ハッキングラボ』をやってみた関係でVirtualBoxが充実してきたので,この際仮想環境上にArch Linux環境を作ってしまおうということでその手順をまとめました.
初めてArchをインストールしたときに手順書を作っておいたので,それを参照しながら作業を行いました.手順書を書いたのが2014年なので当然今では上手くいかない箇所もあり,詰まったら適当に回避しています.
したがって,以下の記述には誤っている箇所や意味のない操作が含まれているかもしれません.あらかじめご了承ください.
ディスクイメージのダウンロード
https://www.archlinux.org/download/ からISOファイルをダウンロードしてきます.基本的には地理的に一番近いサーバ,つまり日本のサーバを選択するのが良いと思います.Archのインストールイメージは1ヶ月ごとに更新され,本稿記述時の最新版はarchlinux-2020.07.01-x86_64.isoでした.今回はそれを用います.
ダウンロードが完了したら一応MD5のハッシュ値を確認しておきます.Windowsの場合下の方法で確認できます.
certutil -hashfile <ダウンロードしたファイル> MD5
このとき出力された値とダウンロードページに掲載されている値が一致していれば問題ありません.もし違っている場合,ファイルが壊れているかニセモノを掴まされた可能性があります.
仮想マシンの設定
仮想マシンの設定は以下の通りです.
- 名前 : Arch
- タイプ : Linux
- バージョン : Arch Linux (64-bit)
- RAM : 2GB (2048MB)
- プロセッサ : 2
- ストレージ : 16GB
- ネットワークアダプタ : NAT
この辺りは好きに設定して構いません.
Arch Linuxのインストール
基本的には公式インストールガイドの通りにやればいいのですが,ひと通り紹介していきます.
起動
仮想マシンの光学ドライブにダウンロードしたISOファイルを割り当てて起動します.
上の画面が表示されたら一番上の項目を選択します.しばらく色々と表示されて,最終的にrootのプロンプトが表示されます.
キーマップの設定
デフォルトではUS配列なので,日本語配列に設定します.
# loadkeys jp106
パーティショニング
実機にインストールする場合は/bootや/home等を分けた方が良いのですが,ここではルートパーティションとスワップパーティションの2つだけを作っていきます.
cfdiskによるパーティション分け
ハードディスクは/dev/sdaであるとし,パーティションを切っていきます.ここではcfdisk
を用います.
# cfdisk /dev/sda
まず,今回の仮想マシンはbiosなのでdosを選択します.
(gptワカラナイ)
[New]を選択し,ルートパーティションの大きさを決めます.ここでは14GBを割り当てました.次にパーティションの種類を問われるので[primary]を選択します.すると,/dev/sda1が作成されます.
/dev/sda1が選択された状態(左側に>>がある)で左端の[Bootable]を選択します.これで/dev/sda1にBootフラグが立ちました.
続いてカーソルキー↓を押してFree spaceを選択し,[New]を選択します.空いた2GBはスワップ領域に割り当てるためそのままEnterを押します.これもprimaryとします.
/dev/sda2が選択された状態で[Type]を選択します.表示された一覧から「82 Linux swap / Solaris」を選択します.
最終的にこんな感じになります.
以上の設定が完了したら[Write]を選択したあと注意をよく読んでyesと入力し,設定した内容を実際にハードディスクに書き込みます.その後[Quit]でcfdisk
を終了します.
ファイルシステムの作成とスワップの有効化
作成した/dev/sda1をext4でフォーマットします.
# mkfs.ext4 /dev/sda1
/dev/sda1を/mntにマウントします.
# mount /dev/sda1 /mnt
/dev/sda2にスワップを設定します.
# mkswap /dev/sda2 # swapon /dev/sda2
インターネット接続の確認と時刻合わせ
ip addr
でネットワークアダプタごとの状態が表示されます.lo等のデバイスは無視し,ethやenpと表示されているデバイスにIPアドレスが設定されていることを確認します.私の環境ではenp0s3に10.0.2.15が割り当てられていました.
ping 8.8.8.8
等でインターネットにアクセスできることを確認します.
インターネット接続が確認出来たらシステムクロックを更新します.
# timedatectl set-ntp true
ベースシステムのインストール
OSの中枢となるソフトウェアをダウンロードしてきてハードディスクにインストールします.pacstrap
を用います.
# pacstrap /mnt base base-devel linux linux-firmware
baseにはbashやtar等最小限の動作に必要なパッケージが,base-develにはgccやsudo等が含まれています.linuxはカーネルとモジュールで,linux-firmwareはファームウェアファイルです.
# pacstrap /mnt grub-bios
ネットワーク接続に必要なパッケージをインストールします.
# pacstrap /mnt dialog netctl dhcpcd
# pacstrap /mnt vim
パッケージのインストールが完了したらfstabを作ります.fstabとはパーティションやブロックデバイスのマウント方法を記述したもので,/etc/fstabに書かれます.書式は決まっているので自分で書いても構いませんが,ここでは簡略化のため自動で生成させます.
# genfstab -U /mnt >> /mnt/etc/fstab
chroot環境における各種設定
chrootとは見かけ上のルートディレクトリを変更するコマンドです.これを用いて,新しくインストールしたシステムを疑似的に操作し設定を行います.詳しくはここを参照してください.
下のコマンドを実行して,/mntすなわち/dev/sda1をルートとしたchroot環境に入ります.
# arch-chroot /mnt
タイムゾーンの設定
シンボリックリンクを作成してタイムゾーンを設定します.日本以外に設定する場合は/Asia/Tokyoの部分を適宜書き換えてください.
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
時刻を設定します.
# hwclock -w --utc
ロケールの設定
/etc/locale.genを編集して,使用するロケールをアンコメントします.
vim /etc/locale.gen
を実行し,en_US.UTF-8 UTF-8とja_JP.UTF-8 UTF-8の前の#を削除して上書き保存します.
その後ロケールを生成します.
# locale-gen
LANG環境変数を設定します.
# echo LANG=en_US.UTF-8 > /etc/locale.conf # export LANG=en_US.UTF-8
コンソールの設定
キーマップの設定を永続化します.
vim /etc/vconsole.conf
を実行し,以下のように記述します.
KEYMAP=jp106
ネットワークの設定
ホスト名を設定します./etc/hostnameにホスト名を記述します.ここではarch-vboxとします.
# echo arch-vbox > /etc/hostname
/etc/hostsを設定します.vim /etc/hosts
を実行し,下を追記します.
127.0.0.1 localhost ::1 localhost 127.0.1.1 arch-vbox.localdomain arch-vbox
initramfsの作成
initramfsとはシステムが起動するときに一時的なルートファイルシステムをRAMに読み込むために用いる方式です.以下のコマンドを実行しinitramfsを生成します.
# mkinitcpio -p linux
途中モジュールaic94xxとwd719xに対し警告が出るかもしれませんが問題ありません.
GRUBのインストール
ブートローダであるGRUBをインストールします.ハードディスク/dev/sdaにインストールする場合以下のようにします.
# grub-install /dev/sda
No error reported.と表示されれば成功です.
続いてGRUBの設定ファイルを生成します.設定は/boot/grub/grub.cfgに記述されます.
# grub-mkconfig -o /boot/grub/grub.cfg
rootパスワードの設定
rootにパスワードを設定します.passwd
を実行し,設定したいパスワードを入力してください.
chroot環境から出て再起動する
以上で基本的な設定が完了したので,chrootを抜けて再起動します.
exit
でchrootを抜けます.続いてumount /mnt
でハードディスクをアンマウントします.
reboot
で再起動し,仮想マシンの光学ドライブからISOファイルの割り当てを除去しておきます.
次からはハードディスクにインストールしたArch Linuxを起動し設定を行っていきます.
再起動後の設定
仮想マシンを再起動するとハードディスクからGRUBが読み込まれ,そのままArch Linuxが起動すると思います.正常に起動しなかった場合はこれまでの手順を確認してください.
ログインプロンプト(下の画面)が表示されたら,login: のあとにrootを入力してEnterを押し,パスワードを入力してログインします.パスワードは印字されませんがそのまま入力してEnterを押してください.
プロンプトが表示されればログイン成功です.
ただ,この状態ではネットワークに接続できていません.インストールのときはISOから起動したシステムが自動で設定してくれていたわけですが,今回はハードディスクからの起動でまだその設定を行っていないからです.ということで設定していきます.
ネットワークの設定
まず,ip link
を実行してネットワークアダプタを調べます.私の環境では下のような出力でした.
ここから,loとenp0s3という2つのアダプタがあることが分かります.仮想マシンに設定しているNATはenp0s3なので,これを設定します.
ネットワークの設定にはnetctlというソフトウェアを利用します./etc/netctl/下にプロファイルを置いておくことで,netctlはプロファイルをもとに自動で設定してくれます.
まず,例をもとにプロファイルを作ります./etc/netctl/examples/にプロファイルの例が置いてあるので,それを/etc/netctl/にコピーして利用します.今回設定するプロファイル名はmy_profileとしておきます.
# cp /etc/netctl/example/ethernet-dhcp /etc/netctl/my_profile
vim /etc/netctl/my_profile
を実行しこれを書き換えます.
2行目の
Interface=eth0
の部分を
Interface=enp0s3
に置き換え,上書き保存します.
作成したプロファイルを使って接続を開始します.
# netctl start my_profile
しばらく待ってip addr
やping
を実行すれば,IPアドレスが割り当てられインターネットに接続できるようになっていると思います.
以下を実行すれば,OS起動時に自動的に接続が開始されます.
# netctl enable my_profile
ユーザの追加
いつまでもrootで操作するのは安全上好ましくありません.よって一般ユーザを設定します.ここではユーザ名とグループ名をtaroとします.
まずtaroグループを追加します.
# groupadd taro
次にtaroというユーザを追加します.
# useradd -s /bin/bash -g taro -m taro
useradd
コマンドのオプションの意味は次の通りです.
- -s /bin/bash : ログインシェルを/bin/bashとする
- -g taro : ユーザのグループをtaroとする
- -m : ユーザのホームディレクトリを作成する(/home/taro)
- taro : ユーザ名はtaroとする
続いてtaroのパスワードを設定します.以下を実行しパスワードを設定します.
# passwd taro
さて,パッケージをインストールする等システムに重大な影響を与える操作を行う際はroot権限が必要になります.しかしパッケージをインストールするのにいちいちrootでログインして操作するなんてことはやっていられないでしょう.そこで,taroとしてログインしている際にもsudo
コマンドによって一時的にroot権限を与えられるようにします.
taroでsudoできるようにするためにはsudoersを編集します. sudoersを編集するためにはvisudo
を用います.
visudo
はvi
がないと動かないため,vim
をvi
とすることにします.下を実行して,/usr/bin/viを/usr/bin/vimのシンボリックリンクとします.
# ln -s /usr/bin/vim /usr/bin/vi
その後,visudo
を実行して,ファイル中ほどの
root ALL=(ALL) ALL
という記述に続き以下のように追記します.操作はVimと同じです.
%taro ALL=(ALL) ALL
以上の操作によって,taroグループに属するユーザにrootと同等の権限を与えることができるようになりました.
一般ユーザでの操作
rootからログアウトしてtaroでログインします.logout
コマンドでログアウトすれば再びログインプロンプトが表示されるため,ユーザ名にtaro,パスワードにtaroのパスワードを指定してログインします.rootにおいてプロンプトの表示は#でしたが,taroでは$になっていると思います.
パッケージの操作
パッケージはpacman
で操作します.これにはroot権限が必要です.
インストールされているパッケージを全て更新するには以下を実行します.
$ sudo pacman -Syu
taroのパスワードが要求されるので,パスワードを入力してEnterを押せばパッケージの更新ができます.
ところで,初めてsudo
を実行した場合,何やら文句が表示されたのちにパスワードが要求されると思います.
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
これは極めて重要なことなので心に留めておいて損はないと思います.
さて,パッケージをインストールするには以下を実行します.今回はneofetch
というソフトをインストールしてみます.
$ sudo pacman -S neofetch
電源操作
shutdown
やreboot
等のコマンドを実行する際にはroot権限が必要になります.したがってtaroにログインした状態で仮想マシンの電源を切るには下のように実行します.
$ sudo shutdown now
おまけ
/etc/vconsole.confに以下の記述を付け足しreboot
することで,コンソールフォントをスマートにできます.
FONT=Lat2-Terminus16
なお,このファイルの編集にはroot権限が必要です.
デフォルトのフォントでneofetch
した際の出力は
の通りですが,Lat2-Terminus16では
となります.