確かに便利! ArchLinuxのインストールスクリプトを作ってみた

インストーラーがないのはArchLinuxの欠点?

Archlinuxはインストールが難しい?本当にそうか?

あっちこっちやっているから面白いし、覚えもするのではないか?

そんな疑問はさておき、インストールをなんとか簡単にできないか、と思ってスクリプトを作ってみた。しかも、コンソールのままにするのも、デスクトップ化するのも選択次第。

1.基本的要件

  • pc 固有の設定には対応していませんので、インストール完了後設定が必要です。
  • 単一のドライブにインストール。
  • スワップ領域は作らない(作ることも可能)。
  • デスクトップにするか、コンソールのままにするかの選択ができます。
  • デスクトップにするのであれば、ディスプレイサーバーはX Window System
  • ディスプレイドライバは intel or amd
  • ディスプレイマネージャーは sddm
  • デスクトップ環境は Xfce4
  • 日本語入力には fcitx5-mozc
  • 全体的に英語環境(設定次第)・・・全体的に英語環境(設定次第)
  • 印刷環境はドライバーの関係で、今回のスクリプトからは省略しました。
  • その他、お好みで。

2.修正箇所

コードの最初の方にある修正箇所は、各人の環境に合わせて修正すること。

また中程に、「Install the desktop—-検討要す」の項目は、デスクトップにするためのアプリ、ドライバなど、インストールするものが並んでいます。デスクトップで必要なものは、好みに応じて、修正、加筆、削除してください。

最初の確認が3回ほど出てきますが、イントール先DISKの選択とマウントポイントの確認では、間違いなければ、y を選択、間違いがあれば、n を入力して、スクリプトの修正ができます。3度めの確認は、真新しいDISKでは、出てこないと思いますが、 すでにフォーマットされているDISKでは[すでにファイルシステムが存在するが・・・」のメッセージが出ます。ここで n を選択すると先に進ませんので、必ず y を選択してください。

後は終了までしばらくかかりますので、コーヒーでも片手にどうぞ・・・

#!/bin/sh
set -e
#-----------------------修正箇所ここから--------------------------
disk_case=1 # ターゲットドライブの形式 1:mmcblk0 or mmcblk1  2:sdx
drive=/dev/mmcblk1 # /dev/sdx or /dev/mmcblk0 or /dev/mmcblk1
ROOT_PASS=pass # 管理者のパスワード(例 root)
USER_NAME=taro # 一般ユーザ名(例 username)
USER_PASS=PASSWD # 一般ユーザのパスワード(例 userpass)
HOST_NAME=arch #ホスト名(例 arch)
ip_a=xxx.xxx.xxx.xxx
iface=enp0s40  # wired-interface
iwface=wlan0 # wireless-interface
gway=xxx.xxx.xxx.xxx
dns=xxx.xxx.xxx.xxx # dns server
ucode=intel # micro-code or amd
ssid_g=Buffalo-G-tttt # ssid bgn
ssud_a=Buffalo-A-yyyy  # ssid a
pass= abcdefg123456  # ssid password
desktop=1  # 1:desktop  0:non-desktop
lang=0     # 0:US 1:japanese キーボードの配置
keep_area=1  # 0:not yet 1:ready 領域確保が済んでいるかどうか?
#-----------------------修正箇所はここまで--------------------------

lsblk
read -p "インストール先${drive}は正しいですか?インストールを開始しますか?(Y/n): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

if [ keep_area -eq 0 ]; then
# sgdisk --new 1::+512m --typecode 1:ef00 --new 2::+$SWAP_SIZE --typecode 2:8200 --new 3  /dev/sda
sgdisk --new 1::+512m --typecode 1:ef00 --new 2  $drive
fi

if [ $disk_case -eq 1 ]; then
	mkfs.vfat -F32 ${drive}p1
	mkfs.ext4 ${drive}p2
#-- disk mount
	mount ${drive}p2 /mnt
	mkdir -p /mnt/boot
	mount ${drive}p1 /mnt/boot以下のスクリプトで
else
	mkfs.vfat -F32 ${drive}1
	mkfs.ext4  ${drive}2
#-- disk mount
	mount ${drive}2 /mnt
	mkdir -p /mnt/boot
	mount ${drive}1 /mnt/boot
fi
#-- install
lsblk
read -p "確認:領域確保・マウントポイントは正しいですか?インストールを続行しますか?(Y/n): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

timedatectl set-ntp true

# Select a mirror
#cp /etc/pacman.d/mirrorlist /tmp0
#grep "\.jp" /tmp/mirrorlist > /etc/pacman.d/mirrorlist

# Install the base system
pacstrap /mnt base base-devel linux linux-firmware grub efibootmgr nano  openssh  sudo git gnupg expect $ucode-ucode iwd cronie ufw coreutils wget

# Install the desktop----検討要す-------------------------------------------
if [ $desktop -eq 1 ]; then
pacstrap /mnt xorg-server xorg-xinit xf86-video-$ucode xfce4 xfce4-goodies fcitx5 fcitx5-mozc fcitx5-qt fcitx5-gtk fcitx5-configtool pulseaudio pavucontrol pulseaudio-alsa otf-ipafont gvfs-smb gnome-keyring nextcloud-client sddm
fi
# ------------------------------------------------------------------------

# Generate an fstab以下のスクリプトで
genfstab -U /mnt >> /mnt/etc/fstab


# arch-chroot
cat <<_END_> /mnt/setup.sh
#!/bin/sh
set -e

# locale
sed -i -e 's/^#\(en_US\|ja_JP\)\(.UTF-8.*\)/\1\2/' /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf

# Keymap
if [ $lang -eq 1 ]; then
echo KEYMAP=jp106 > /etc/vconsole.conf
fi

if [ $desktop -eq 1 ] && [ $lang -eq 1 ]; then
mkdir -p /etc/X11/xorg.conf.d
cat << EOS >> /etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "jp,u0
				Option "XkbModel" "pc104"
        Option "XkbVariant" ",dvorak"
        Option "XkbOptions" "grp:alt_shift_toggle"
EndSection
EOS
fi
# fcitx5 setting----
if [ $desktop -eq 1 ]; then
cat << EOS >> /etc/environment
GTK_IM_MODULE=fcitx5_END_
QT_IM_MODULE=fcitx5
XMODIFIERS=@im=fcitx5
EOS
fi
# Time
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc --utc


# Initramfs
mkinitcpio -p linux

# Boot loader
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

# Hostname
echo $HOST_NAME > /etc/hostname
cat  << EOS > /etc/hosts
127.0.0.1	$HOST_NAME.localdomain	localhost.localdomain	localhost	$HOST_NAME
::1		$HOST_NAME.localdomain	localhost.localdomain	localhost	$HOST_NAME
EOS

# network & systemd-netwarkd setting
cat << EOS > /etc/systemd/network/10-wired.network
[Match]
Name=$iface
[Network]
Address=$ip_a/24
Gateway=$gway
DNS=$dns
EOS
cat << EOS > /etc/systemd/network/20-wireless.network
[Match]
Name=$iwface
[Network]
DHCP=yes
EOS
mkdir -p /var/lib/iwd
cat << EOS >> /var/lib/iwd/$ssid_g.psk
[Security]
Passphrase=$pass
EOS
cat << EOS >> /var/lib/iwd/$ssid_a.psk
[Security]
Passphrase=$pass
EOS

chmod 600 /var/lib/iwd/$ssid_a.psk
chmod 600 /var/lib/iwd/$ssid_g.psk


# Service
systemctl enable iwd.service
systemctl enable sshd.service
systemctl enable systemd-networkd.service
systemctl enable cronie
systemctl enable ufw
timedatectl set-ntp true

if [ $desktop -eq 1 ]; then
systemctl enable sddm.service
fi

# Password
echo root:$ROOT_PASS | chpasswd
# useradd
echo 'Defaults env_keep += “HOME”' >> /etc/sudoers
echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers
useradd -m -G wheel $USER_NAME
echo $USER_NAME:$USER_PASS | chpasswd

_END_
chmod +x /mnt/setup.sh
arch-chroot /mnt /setup.sh
rm /mnt/setup.sh
umount -R /mnt/boot /mnt
#reboot
read -p "再起動します。インストールメディアの取り出しは準備できましたか?(Y/n): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac
reboot

3.実行手順

(1)インストールディスクで立ち上げたPCで

# passwd(rootのパスワードを設定)

# ip a( IPアドレスを確認)

xxx.xxx.xxx.xxx.xxx

(2)リモートpcからsshで接続

$ ssh root@xxx.xxx.xxx.xxx( rootでログイン)

# nano ~/arch_install.sh(ファイル名は何でもよい。)

# chmod +x ~/arch_install.sh(実行権限を付与)

これに手を加え、最小限のデスクトップを作ってみた。

上のコードをコピペで貼り付けて、保存・終了。

# ~/arch_install.sh(実行)

グラフィカルログインまでにおよそ4分でした。たしかに便利。

aur アプリの導入もこれからできると完璧なのですが’・・・

参考

Arch Linux のインストール手順をシェルスクリプトにした」を書いているnd0fさんのページ

最小限度のインストールはバッチリ。公開していただいた方には感謝申し上げます。

set -e にしておくと便利。

コメント

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