21.8 Rocky Linux 兼容层
21.8 Rocky Linux 兼容层
Shell 脚本
#!/bin/sh
ROOT_DIR=/compat
DIST=rocky
DIST_FULLNAME="Rocky Linux"
VER=9
SUB_VER=5
TIME_VER="latest"
SORT=Base
FILE=Rocky-${VER}-Container-${SORT}.${TIME_VER}.x86_64.tar.xz
SUBDIR=""
URL=https://mirrors.ustc.edu.cn/${DIST}/${VER}.${SUB_VER}/images/x86_64
UPDATE_CMD="dnf makecache"
UPGRADE_CMD="dnf upgrade -y"
INSTALL_CMD="dnf install -y"
UPDATE=1
UPGRADE=1
INSTALL=1
echo "Starting ${DIST_FULLNAME} installation"
sleep 0.5
# 检查 Linux 模块
echo "Checking required modules"
if [ "$(sysrc -n linux_enable)" != "YES" ]; then
echo "linux service is not enabled. Enable it now?(Y|n)"
read ANSWER
case $ANSWER in
[Nn][Oo]|[Nn])
echo "Warning: You MUST start linux service with \"service linux start\" EACH TIME FREEBSD IS REBOOTED."
echo "Sure to continue without enabling linux service?(y|N)"
read ANSWER
case $ANSWER in
[Yy][Ee][Ss]|[Yy])
echo "WARNING: linux module not enabled"
;;
[Nn][Oo]|[Nn]|"")
echo "Enabling linux module"
sysrc linux_enable=YES
;;
*)
echo "Aborting."
exit 4
;;
esac
;;
[Yy][Ee][Ss]|[Yy]|"")
echo "Enabling linux module"
sysrc linux_enable=YES
;;
*)
echo "Aborting."
exit 4
;;
esac
fi
echo "Starting linux service"
service linux start
# 检查 dbus
if ! which -s dbus-daemon; then
echo "dbus-daemon not found. Install dbus now?(Y|n)"
read ANSWER
case $ANSWER in
[Nn][Oo]|[Nn])
echo "Abort. dbus not installed"
exit 2
;;
[Yy][Ee][Ss]|[Yy]|"")
echo "Installing dbus"
pkg install -y dbus
;;
*)
echo "Aborting."
exit 4
;;
esac
fi
if [ "$(sysrc -n dbus_enable)" != "YES" ]; then
echo "dbus is not enabled. Enable it now?(Y|n)"
read ANSWER
case $ANSWER in
[Nn][Oo]|[Nn])
echo "WARNING: You MUST start dbus with \"service dbus start\" EACH TIME FREEBSD IS REBOOTED."
echo "Sure to continue without enabling dbus?(y|N)"
read ANSWER
case $ANSWER in
[Yy][Ee][Ss]|[Yy])
echo "Warning: dbus service not enabled"
;;
[Nn][Oo]|[Nn]|"")
echo "Enabling dbus service"
service dbus enable
;;
*)
echo "Aborting."
exit 4
;;
esac
;;
[Yy][Ee][Ss]|[Yy]|"")
echo "Enabling dbus service"
service dbus enable
;;
*)
echo "Aborting."
exit 4
;;
esac
fi
if [ -z "$(ps aux | grep -p dbus | grep -v grep)" ]; then
echo "Starting dbus service"
service dbus start
fi
# 检查 nullfs
if [ "$(sysrc -f /boot/loader.conf -qn nullfs_load)" != "YES" ]; then
echo "nullfs should be loaded on boot. Set nullfs_load to YES? (Y|n)"
read ANSWER
case $ANSWER in
[Nn][Oo]|[Nn])
echo "Warning: You MUST load nullfs with \"kldload -v nullfs\" EACH TIME FREEBSD IS REBOOTED."
echo "Sure to continue without setting nullfs_load to YES?(y|N)"
read ANSWER
case $ANSWER in
[Yy][Ee][Ss]|[Yy])
echo "Warning: nullfs_load not set"
;;
[Nn][Oo]|[Nn]|"")
echo "Setting nullfs_load to YES"
sysrc -f /boot/loader.conf nullfs_load="YES"
;;
*)
echo "Aborting."
exit 4
;;
esac
;;
[Yy][Ee][Ss]|[Yy]|"")
echo "Setting nullfs_load to YES"
sysrc -f /boot/loader.conf nullfs_load="YES"
;;
*)
echo "Aborting."
exit 4
;;
esac
fi
if ! kldstat -n nullfs >/dev/null 2>&1; then
echo "Loading nullfs module"
kldload -v nullfs
fi
# 下载和解压基础系统
echo "${DIST_FULLNAME} will be installed in ${ROOT_DIR}/${DIST}"
echo "Downloading basic system"
fetch ${URL}/${FILE}
echo "Extracting basic system"
sleep 0.5
mkdir -p ${ROOT_DIR}/${DIST}
tar xvpf ${FILE} ${SUBDIR:-} -C ${ROOT_DIR}/${DIST} --numeric-owner
# 挂载必要文件系统
echo "Mounting required file system"
sleep 0.5
echo "devfs ${ROOT_DIR}/${DIST}/dev devfs rw,late 0 0" >> /etc/fstab
echo "tmpfs ${ROOT_DIR}/${DIST}/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0" >> /etc/fstab
echo "fdescfs ${ROOT_DIR}/${DIST}/dev/fd fdescfs rw,late,linrdlnk 0 0" >> /etc/fstab
echo "linprocfs ${ROOT_DIR}/${DIST}/proc linprocfs rw,late 0 0" >> /etc/fstab
echo "linsysfs ${ROOT_DIR}/${DIST}/sys linsysfs rw,late 0 0" >> /etc/fstab
echo "/tmp ${ROOT_DIR}/${DIST}/tmp nullfs rw,late 0 0" >> /etc/fstab
mount -al
```sh
/compat/rocky/
├── dev/ # 设备文件系统
│ ├── fd/ # 文件描述符文件系统
│ └── shm/ # 内存文件系统
├── etc/
│ ├── resolv.conf # DNS 配置
│ └── yum.repos.d/
│ ├── rocky-extras.repo
│ └── rocky.repo # YUM 软件源配置
├── proc/ # Linux 进程文件系统
├── sys/ # Linux 内核对象文件系统
└── tmp/ # 临时目录配置 DNS
设置 USTC 镜像源
更新、升级和安装软件
清理
最后更新于