Tùy biến file ảnh cài đặt piOS

Giả sử file cài đặt piOS là 2022-04-04-raspios-bullseye-arm64-lite.img

Chúng ta sẽ sửa đổi file này bằng img.edit, thêm vào các cài đặt sau:

  • Wifi
  • Ip tĩnh
  • SSH certificate
  • Timezone
  • Cập nhật hệ thống
  • Một số phần mềm cần dùng

Sau khi ghi ra đĩa và khởi động lần đầu tiên, chúng ta sẽ có được các cài đặt như trên.

### 1. Mở file img
/path/to/img.edit /path/to/2022-04-04-raspios-bullseye-arm64-lite.img

### 2. Chỉnh sửa các cài đặt cho phù hợp
boot=/tmp/img.edit/loop0p1
rootfs=/tmp/img.edit/loop0p2
ssh_cert=/root/.ssh

# Wifi
ssid="your_ssid"
wifi_pass="your_password"

# Static IP
interface=wlan0
static_ip=your_ip
routers=your_router_ip

# run once: ='' nếu không cần
commands='
apt update && apt -y upgrade > /root/log
apt install -y mc tmux zstd >> /root/log
'

### 3. Chạy các lệnh cài đặt
touch $boot/ssh
if [ ! -z "$ssid" ]; then
  pass=$(wpa_passphrase "$ssid" "$wifi_pass" | sed '/\s*psk=\([0-9a-f]\+\)/!d;s//\1/')
  cat <<EOF >$boot/wpa_supplicant.conf
country=VN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1

update_config=1
network={
  ssid="$ssid"
  psk=$pass
}
EOF
fi

if [ -d $ssh_cert ]; then
  rsync -a $ssh_cert $rootfs/root
  rsync -a $ssh_cert $rootfs/home/pi
  chown -R root:root $rootfs/root
  chown -R pi:pi $rootfs/home/pi
  chmod 700 $rootfs/root/.ssh $rootfs/home/pi/.ssh
  chmod -R 600 $rootfs/root/.ssh/* $rootfs/home/pi/.ssh/*
fi

if [ ! -z "$commands" ]; then
  cat <<EOF > $rootfs/root/runonce.sh
sleep 5
$commands
EOF
  cat <<EOF > $rootfs/etc/cron.d/runonce
@reboot root /bin/bash /root/runonce.sh; /bin/rm -f /etc/cron.d/runonce
EOF
fi

sed -i '/static IP configuration/,/^$/{s/.*\(interface \).*/\1'"$interface"'/
s/.*\(static ip_address\).*/\1='"$static_ip"'\/24/
s/.*\(static routers\).*/\1='"$routers"'\/24/
s/.*\(static domain_name_servers\).*/\1='"$routers"' 8.8.8.8/
}' $rootfs/etc/dhcpcd.conf

rm -f $rootfs/etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Ho_Chi_Minh $rootfs/etc/localtime

### 4. Đóng file img
/path/to/img.edit

Chú thich

  • Mạng chậm có thể khiến việc cập nhật hệ thống và cài đặt phần mềm kéo dài
  • Có thể tạo file bash từ các dòng trên hay chạy từng dòng lệnh
#!/bin/bash
# custom piOS, version 20220712
# LNT <lnt@ly-le.info>

[ $# -ne 1 ] && { echo "$(basename $0) path/to/img/file";exit; }
img=$(realpath "$1")
[ ! -f "$img" ] && { echo "img file not found!";exit; }
[ ! -f ./img.edit ] && { echo "img.edit not found!";exit; }

# options
ssh_cert=/root/.ssh
  # wifi
ssid="your_ssid"
wifi_pass="your_password"
  # static IP
interface=wlan0
static_ip=your_ip
routers=your_router_ip
  # run once, commands='' nếu không cần
commands='
apt update && apt -y upgrade > /root/log
apt install -y mc tmux zstd >> /root/log
'
echo '+ Mở file img'
{ read boot; read rootfs; } <<< $(./img.edit $1 | sed -r '/vfat to/,/ext4 to/!d;s/.+(vfat to|ext4 to) (.+)$/\2/')

echo '+ Cho phép ssh'
touch $boot/ssh

if [ ! -z "$ssid" ]; then
  echo '+ Cài đặt wifi'
  pass=$(wpa_passphrase "$ssid" "$wifi_pass" | sed '/\s*psk=\([0-9a-f]\+\)/!d;s//\1/')
  cat <<EOF >$boot/wpa_supplicant.conf
country=VN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1

update_config=1
network={
  ssid="$ssid"
  psk=$pass
}
EOF
fi

if [ -d $ssh_cert ]; then
  echo '+ Sao chép ssh cert'
  rsync -a $ssh_cert $rootfs/root
  rsync -a $ssh_cert $rootfs/home/pi
  chown -R root:root $rootfs/root
  chown -R pi:pi $rootfs/home/pi
  chmod 700 $rootfs/root/.ssh $rootfs/home/pi/.ssh
  chmod -R 600 $rootfs/root/.ssh/* $rootfs/home/pi/.ssh/*
fi

echo '+ Cài đặt static ip'
sed -i '/static IP configuration/,/^$/{s/.*\(interface \).*/\1'"$interface"'/
s/.*\(static ip_address\).*/\1='"$static_ip"'\/24/
s/.*\(static routers\).*/\1='"$routers"'\/24/
s/.*\(static domain_name_servers\).*/\1='"$routers"' 8.8.8.8/
}' $rootfs/etc/dhcpcd.conf

echo '+ Cài đặt local time'
rm -f $rootfs/etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Ho_Chi_Minh $rootfs/etc/localtime

if [ ! -z "$commands" ]; then
  echo '+ Cài đặt softwares'
  cat <<EOF > $rootfs/root/runonce.sh
sleep 5
$commands
EOF
  cat <<EOF > $rootfs/etc/cron.d/runonce
@reboot root /bin/bash /root/runonce.sh; /bin/rm -f /etc/cron.d/runonce
EOF
fi

echo '+ Đóng file img'
./img.edit

Comments Off on Tùy biến file ảnh cài đặt piOS

Filed under Software

Comments are closed.