Linux-Server

Debian

APT Update 版本更新提示

重新更新,并允许版本更新:

apt-get update --allow-releaseinfo-change

登陆时间长

目前仅在Debian12的LXC特权容器出现。

表现为输入密码后需要约二十秒进入SHELL环境,使用:

pam-auth-update

取消勾选Register user sessions in the systemd control group hierarchy.

安装Docker

先卸载旧的:

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

安装新的:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
 
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Alpine

安装Docker

# 安装Docker
apk add docker
# 启动时运行Docker daemon
rc-update add docker default
service docker start
# 添加用户组
addgroup ${USER} docker
# 安装Compose
apk add docker-cli-compose

详情可以看:Docker - Alpine Linux

安装SSH

# 安装openssh-server
apk add openssh-server
# 启动时运行sshd
rc-update add sshd

安装NFS

apk update
apk add nfs-utils

挂载NFS

如果需要挂载NFS的话,需要保证NFS状态就绪,可以通过自启动脚本(/etc/init.d/mount-nfs)来实现这个功能:

#!/sbin/openrc-run
 
description="Auto mount NFS shares"
 
depend() {
    need networking rpcbind
    use logger
    after firewall
}
 
SERVER="192.168.31.4"
MOUNTPOINT="/mnt/nfs"
LOGFILE="/var/log/mount-nfs.log"
 
test_folder() {
    local FOLDER_PATH="$1"
    if [ ! -d "$FOLDER_PATH" ]; then
        mkdir -p "$FOLDER_PATH"
        return $?
    fi
}
 
mount_nfs() {
    local REMOTE="$1"
    local LOCAL="$2"
    test_folder "$MOUNTPOINT/$LOCAL"
    if [ $? -ne 0 ]; then
        echo "[$(date)] Failed to mkdir $MOUNTPOINT/$LOCAL" >> $LOGFILE
        return 1
    fi
    if mountpoint -q "$MOUNTPOINT/$LOCAL"; then
        echo "[$(date)] $MOUNTPOINT/$LOCAL already mounted." >> $LOGFILE
        return 0
    fi
 
    if mount -t nfs4 "$SERVER:$REMOTE" "$MOUNTPOINT/$LOCAL"; then
        echo "[$(date)] Successfully mounted $MOUNTPOINT/$LOCAL." >> $LOGFILE
    else
        echo "[$(date)] Mount $SERVER:$REMOTE failed." >> $LOGFILE
    fi
}
 
start() {
    test_folder "$MOUNTPOINT"
    if [ $? -ne 0 ]; then
        echo "[$(date)] Failed to mkdir $MOUNTPOINT" >> $LOGFILE
        exit 1
    fi
 
    for i in $(seq 1 30); do
        if showmount -e $SERVER >/dev/null 2>&1; then
            echo "[$(date)] NFS on $SERVER ready" >> $LOGFILE
            break
        else
            echo "[$(date)] NFS on $SERVER not ready" >> $LOGFILE
            sleep 10
        fi
    done
 
    mount_nfs "/mnt/BigStorage/Media" "Media"
 
}
 
stop() {
    umount "$MOUNTPOINT/Media"
}

注意这里写入文件后,通过rc-update add mount-nfs default来自启动。

为Alpine启用glibc支持

apk add gcompat

即便启用了glibc的支持,也是无法启动Jetbrains的Backend的,放弃了此方案,准备切换到Debian

RockyLinux

安装Docker

首先添加Docker的源:

dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

然后安装Docker:

dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

配置开机启动:

systemctl enable --now docker

Docker在LXC中的问题解决

在LXC中会出现奇奇怪怪的问题,因此需要开启LXC的特权容器选项,然后在权限中选中嵌套:

400

还需要修改一下LXC的配置,配置文件在/etc/pve/lxc/目录,修改对应自己的VMID的配置文件:

arch: amd64
cores: 4
features: mount=nfs,nesting=1
hostname: linux-server
memory: 8192
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.31.2,hwaddr=BC:24:11:67:FD:D3,ip=192.168.31.6/24,ip6=2408:8207:30c1:b80:be24:11ff:fe5a:1ec2/64,type=veth
ostype: alpine
protection: 1
rootfs: local-lvm:vm-104-disk-0,size=40G
swap: 0
lxc.cgroup2.devices.allow: a
lxc.cap.drop: 

最主要的是添加最后两行的cgroupcap的配置。