蔵風人

If you try it, it will be somehow & Simple is Best!

[ HOME ]  [ About ]  [ Linux ]  [ CMS ]  [Python]  [ Blog ]


[ 最終更新日:2026-05-27(Wed) 22:54 ]

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

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

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

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

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

1.基本的要件

2.修正箇所

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

#!/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さんのページ(現在はアクセスできない。)公開していただいた方には感謝申し上げます。