21.9 Slackware Linux 兼容层
Slackware Linux 并未提供基础系统下载。我们需要在 Slackware Linux 或 FreeBSD 下自行使用脚本生成(在 FreeBSD 上需安装软件包 bash 和 gmake)。
原版脚本地址为 https://github.com/nnnewb/slackware-WSL。
由于没有官方服务器提供支持,请读者自行生成该文件并放置在兼容层对应的路径下。
兼容层脚本内容如下:
#!/bin/sh
export ROOT_DIR=/compat
export DIST=slackware
export DIST_FULLNAME=Slackware
VER=15.0
FILE=${DIST}64-${VER}.tar.xz
SUBDIR=""
URL=https://book.bsdcn.org # 修改为你自己的文件所在链接
UPDATE_CMD="slackpkg update"
UPGRADE_CMD="slackpkg upgrade-all"
INSTALL_CMD="slackpkg install"
UPDATE=1
UPGRADE=1
INSTALL=1
echo "Starting to install ${DIST_FULLNAME}"
sleep 0.5
# 检查 Linux 模块
echo "Checking relative 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 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 when 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
# 配置 DNS
echo "Should ${DIST_FULLNAME} use Alibaba DNS or local resolv.conf? ((A)li | (L)ocal | (C)ancel)"
read ANSWER
case $ANSWER in
[Aa][Ll][Ii]|[Aa]|"")
echo "Setting Alibaba DNS"
echo "nameserver 223.5.5.5" >> ${ROOT_DIR}/${DIST}/etc/resolv.conf
DNS_CONFIGURED=1
;;
[Ll][Oo][Cc][Aa][Ll]|[Ll])
echo "Using local resolv.conf"
cp /etc/resolv.conf ${ROOT_DIR}/${DIST}/etc/resolv.conf
DNS_CONFIGURED=1
;;
*)
echo "Canceled."
echo "You have to edit ${ROOT_DIR}/${DIST}/etc/resolv.conf by yourself!"
DNS_CONFIGURED=0
;;
esac
# 更新、升级
if [ $DNS_CONFIGURED = 1 ]; then
[ $UPDATE = 1 ] && chroot ${ROOT_DIR}/${DIST} /bin/bash -c "${UPDATE_CMD}"
[ $UPGRADE = 1 ] && chroot ${ROOT_DIR}/${DIST} /bin/bash -c "${UPGRADE_CMD}"
else
echo "DNS not configured, skipping upgrade."
fi
# 设置默认 bash 配置
cp ${ROOT_DIR}/${DIST}/etc/profile ${ROOT_DIR}/${DIST}/root/.bashrc
# 清理
echo "Cleaning up"
rm ${FILE}
echo "Done."
echo "Now you can switch to ${DIST_FULLNAME} with \"chroot ${ROOT_DIR}/${DIST} /bin/bash\""最后更新于
这有帮助吗?