これまで記事にしてきた実験,特にコンピュータ実機を用いた実験では,Arch Linux をインストールしたラップトップを使用していました.
例えばこれら↓
a3vtyq2e9ua1.hatenablog.com
a3vtyq2e9ua1.hatenablog.com
『ハッキングラボ』 をやってみた関係で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
このとき出力された値とダウンロードページ に掲載されている値が一致していれば問題ありません.もし違っている場合,ファイルが壊れているかニセモノを掴まされた可能性があります.
ダウンロードしたISOファイルのMD5 のハッシュ値 を計算し,公式の情報と比較する.一致している
仮想マシン の設定は以下の通りです.
名前 : Arch
タイプ : Linux
バージョン : Arch Linux (64-bit)
RAM : 2GB (2048MB)
プロセッサ : 2
ストレージ : 16GB
ネットワークアダプタ : NAT
この辺りは好きに設定して構いません.
Arch Linux のインストール
基本的には公式インストールガイド の通りにやればいいのですが,ひと通り紹介していきます.
起動
仮想マシン の光学ドライブ にダウンロードしたISOファイルを割り当てて起動します.
仮想光学ドライブ から起動した
上の画面が表示されたら一番上の項目を選択します.しばらく色々と表示されて,最終的にrootのプロンプトが表示されます.
キーマップの設定
デフォルトではUS配列なので,日本語配列 に設定します.
# loadkeys jp106
パーティショニング
実機にインストールする場合は/bootや/home等を分けた方が良いのですが,ここではルートパーティション とスワップ パーティション の2つだけを作っていきます.
ハードディスクは/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 」を選択します.
最終的にこんな感じになります.
14GBの/dev/sda1と2GBの/dev/sda2が存在している
以上の設定が完了したら[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 はファームウェア ファイルです.
GRUB ブートローダ をインストールします.
# pacstrap /mnt grub-bios
ネットワーク接続に必要なパッケージをインストールします.
# pacstrap /mnt dialog netctl dhcpcd
テキストエディタ としてVim をインストールします.
# pacstrap /mnt vim
パッケージのインストールが完了したらfstabを作ります.fstabとはパーティション やブロックデバイス のマウント方法を記述したもので,/etc/fstabに書かれます.書式は決まっているので自分で書いても構いませんが,ここでは簡略化のため自動で生成させます.
# genfstab -U /mnt >> /mnt/etc/fstab
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 をインストールします.ハードディスク/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 を抜けて再起動します.
exit
でchroot を抜けます.続いてumount /mnt
でハードディスクをアンマウントします.
reboot
で再起動し,仮想マシン の光学ドライブ からISOファイルの割り当てを除去しておきます.
次からはハードディスクにインストールしたArch Linux を起動し設定を行っていきます.
再起動後の設定
仮想マシン を再起動するとハードディスクからGRUB が読み込まれ,そのままArch Linux が起動すると思います.正常に起動しなかった場合はこれまでの手順を確認してください.
ログインプロンプト(下の画面)が表示されたら,login: のあとにrootを入力してEnterを押し,パスワードを入力してログインします.パスワードは印字されませんがそのまま入力してEnterを押してください.
Archのログインプロンプト
プロンプトが表示されればログイン成功です.
ただ,この状態ではネットワークに接続できていません.インストールのときはISOから起動したシステムが自動で設定してくれていたわけですが,今回はハードディスクからの起動でまだその設定を行っていないからです.ということで設定していきます.
ネットワークの設定
まず,ip link
を実行してネットワークアダプタ を調べます.私の環境では下のような出力でした.
ip linkの出力.loとenp0s3が存在することが分かる
ここから,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
した際の出力は
デフォルトフォントでneofetch
の通りですが,Lat2-Terminus16では
スマートになった.気がする
となります.