インストーラーがないのは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 にしておくと便利。
コメント