• 首页
  • 微语
  • 关于
  • 搜索
  • 夜间模式
    ©2025  枕书 Theme by OneBlog
    搜索
    标签
    默认分类

    Alpine系统上手操作

    2025.07.28 / 156 阅读 / 0 评论 / 7323 字
    默认分类

    Alpine系统上手操作

    阅读 156 评论 0 发表于2025.07.28

    为什么开始要使用alpine系统呢?前段时间收了个1g硬盘的cdt,由于空间实在太小了,放debian系统进去担心会爆盘,故只得不得不使用alpine系统了,由此我也开始被长达几天的折磨了。

    先介绍下alpine系统吧,这个系统无论是流行度还是适用人数都远远不及 Ubuntu/Debian 系统,和alpine系统配套出现的往往是特定场景,比如我刚才说的1g硬盘,又或者是128mb内存的lxc机器。一般情况在机器性能够用的情况下,应该是不会有人选择alpine系统的。alpine系统轻量归轻量,但是使用起来就相对要难受一点了,并且同样作为Linux系统,它的操作语言和逻辑与大家常用的Ubuntu/Debian有所不同,这一点上也会导致很多人无法适应。

    Alpine的优点:

    • 轻量,极致的轻量 ,镜像仅有50M左右
    • apk包管理工具极其方便
    • 不默认存储日志,重启后日志消失(适合容器),需手动配置持久化
    • 使用轻量级 OpenRC 管理服务(命令 rc-service),而非 systemd(只专注于 服务管理,依赖更少)

    Alpine的不足:

    • 兼容性问题,很多一键脚本并不支持一键使用,需要单独下载二进制文件等
    • 上手难度略高,部署服务的话需要自行添加持久化运行和开机自启

    然后记录下自己使用alpine系统一些心得吧(目前用的不多,很多特性还没体验到,后续再补)

    首先是一些常见的指令:

    1. 包管理(apk​​)

    功能命令说明
    更新软件源​apk update​同步仓库索引(类似 apt update)
    安装软件​apk add <包名>​如 apk add nginx curl​
    删除软件​apk del <包名>​卸载软件包
    搜索软件​apk search <关键词>​如 apk search python3​
    查看已安装​apk info​列出所有安装的包
    升级所有软件​apk upgrade​更新所有已安装包

    2. 服务管理(OpenRC)

    功能命令说明
    启动服务​rc-service <服务名> start​如 rc-service nginx start​
    停止服务​rc-service <服务名> stop​
    重启服务​rc-service <服务名> restart​
    查看状态​rc-status​列出所有服务状态
    开机自启​rc-update add <服务名>​如 rc-update add nginx​
    禁用自启​rc-update del <服务名>​

    我一般是依次用以下几个命令先配置好系统运行环境:

    ​apk update​

    ​apk upgrade​

    ​apk add unzip curl wget git sudo bash​

    其次是开启bbr+fq

    cat > /etc/sysctl.d/99-tcp.conf <<EOF
    net.core.default_qdisc = fq
    net.ipv4.tcp_congestion_control = bbr
    EOF
    
    sysctl -p /etc/sysctl.d/99-tcp.conf

    由于cdt的1g硬盘实在太小,目前只开了realm转发,一些常用的realm一键脚本都只支持Ubuntu/Debian系统的,我就自行搓了个半自动的realm脚本专门适配alpine系统使用的

    #!/bin/bash
    
    SERVICE_NAME="realm"
    INIT_SCRIPT_PATH="/etc/init.d/$SERVICE_NAME"
    REALM_BIN_DIR="/usr/local/bin"
    REALM_BIN_PATH="${REALM_BIN_DIR}/realm"
    REALM_CONFIG_DIR="/etc/realm"
    REALM_CONFIG_FILE="${REALM_CONFIG_DIR}/config.toml"
    
    DOWNLOAD_URL="https://github.com/zhboner/realm/releases/download/v2.7.0/realm-x86_64-unknown-linux-musl.tar.gz"
    TEMP_DOWNLOAD_FILE="/tmp/realm_download.tar.gz"
    TEMP_EXTRACT_DIR="/tmp/realm_extract_$$"
    
    clear_screen() {
        clear
    }
    
    check_root() {
        if [ "$(id -u)" -ne 0 ]; then
            echo "错误:此脚本需要 Root 权限才能运行。请使用 'bash $0' (在root用户下) 运行。"
            exit 1
        fi
    }
    
    install_deps() {
        echo "--- 正在安装依赖 (wget, tar, iproute2)... ---"
        apk add --no-cache -q wget tar iproute2 || { echo "错误:依赖安装失败。"; exit 1; }
        echo "依赖安装完成。"
    }
    
    create_openrc_init_script() {
        echo "--- 正在创建 OpenRC init 脚本 ${INIT_SCRIPT_PATH}... ---"
        cat > "$INIT_SCRIPT_PATH" << 'EOF_INIT_SCRIPT'
    #!/sbin/openrc-run
    
    name="realm"
    description="Realm Service"
    supervisor="supervise-daemon"
    command="/usr/local/bin/realm"
    command_args="-c /etc/realm/config.toml"
    
    depend() {
        after net dns
    }
    
    restart() {
        ebegin "Restarting $name"
        if [ -e /run/openrc/boot.d/realm.pid ]; then
            stop
        fi
        start
        eend $?
    }
    
    EOF_INIT_SCRIPT
    
        chmod +x "$INIT_SCRIPT_PATH" || { echo "错误:OpenRC init 脚本权限设置失败。"; exit 1; }
        echo "OpenRC init 脚本已创建并赋予执行权限。"
    }
    
    install_realm_binary() {
        echo "--- 正在安装 Realm 主程序 (musl 版本)... ---"
        echo "将从 ${DOWNLOAD_URL} 下载 Realm。"
    
        mkdir -p "$REALM_BIN_DIR" "$REALM_CONFIG_DIR" || { echo "错误:创建目录失败。"; exit 1; }
    
        wget -O "$TEMP_DOWNLOAD_FILE" "$DOWNLOAD_URL" || { echo "错误:下载 Realm 失败。请检查网络或下载链接。"; rm -f "$TEMP_DOWNLOAD_FILE"; exit 1; }
        echo "下载完成。"
    
        mkdir -p "$TEMP_EXTRACT_DIR" || { echo "错误:创建临时解压目录失败。"; exit 1; }
        tar -xzvf "$TEMP_DOWNLOAD_FILE" -C "$TEMP_EXTRACT_DIR" || { echo "错误:解压 Realm 失败。"; rm -rf "$TEMP_EXTRACT_DIR" "$TEMP_DOWNLOAD_FILE"; exit 1; }
        echo "解压完成。"
    
        local found_realm_bin=$(find "$TEMP_EXTRACT_DIR" -name "realm" -type f -executable | head -n 1)
        if [ -n "$found_realm_bin" ]; then
            if [ -f "$REALM_BIN_PATH" ] || [ -d "$REALM_BIN_PATH" ]; then
                echo "发现旧的 Realm 安装,正在清理..."
                rm -rf "$REALM_BIN_PATH" || { echo "错误:清理旧 Realm 文件失败。"; exit 1; }
            fi
            
            echo "正在移动 Realm 可执行文件到 ${REALM_BIN_PATH}..."
            mv "$found_realm_bin" "$REALM_BIN_PATH" || { echo "错误:移动 Realm 可执行文件失败。"; exit 1; }
            
            chmod +x "$REALM_BIN_PATH" || { echo "错误:设置 Realm 可执行权限失败。"; exit 1; }
            echo "Realm 可执行文件已成功安装到:${REALM_BIN_PATH}"
        else
            echo "错误:在解压的文件中未找到可执行的 Realm 二进制文件。请检查下载内容。"
            exit 1
        fi
    
        rm -rf "$TEMP_DOWNLOAD_FILE" "$TEMP_EXTRACT_DIR" || { echo "警告:临时文件清理失败。"; }
        echo "Realm 主程序安装完毕。"
    }
    
    initial_setup_check() {
        if [ ! -f "$REALM_BIN_PATH" ] || [ ! -f "$INIT_SCRIPT_PATH" ] || ! rc-update -s | grep -q "$SERVICE_NAME"; then
            echo "--- 发现 Realm 未完全设置,正在执行初次安装... ---"
            install_deps
            create_openrc_init_script
            install_realm_binary
    
            echo "--- 正在启用 Realm 服务开机自启... ---"
            rc-update add "$SERVICE_NAME" default || { echo "错误:设置开机自启失败。"; exit 1; }
            echo "Realm 服务已添加到开机启动。"
    
            echo "--- Realm 初次安装和设置完成! ---"
            echo "重要:请务必手动创建或编辑 Realm 配置文件!"
            echo "文件路径: ${REALM_CONFIG_FILE}"
            echo "例如,使用 'vi ${REALM_CONFIG_FILE}' 命令进行编辑。"
            read -p "按任意键继续进入管理菜单..." -n 1 -s
            clear_screen
        fi
    }
    
    check_root
    initial_setup_check
    
    while true; do
        echo "--- Realm 服务管理菜单 ---"
        echo "1. 启动 Realm 服务"
        echo "2. 停止 Realm 服务"
        echo "3. 重启 Realm 服务"
        echo "4. 查看 Realm 服务状态"
        echo "5. 手动编辑 Realm 配置文件 (${REALM_CONFIG_FILE})"
        echo "6. 退出"
        echo "--------------------------"
    
        read -p "请输入你的选择 (1-6): " choice
        echo
    
        case $choice in
            1)
                echo "正在启动 Realm 服务..."
                rc-service "$SERVICE_NAME" start || echo "启动失败,请检查日志或配置。"
                ;;
            2)
                echo "正在停止 Realm 服务..."
                rc-service "$SERVICE_NAME" stop || echo "停止失败,请检查服务状态。"
                ;;
            3)
                echo "正在重启 Realm 服务..."
                rc-service "$SERVICE_NAME" restart || echo "重启失败,请检查日志或配置。"
                ;;
            4)
                echo "正在查看 Realm 服务状态..."
                rc-service "$SERVICE_NAME" status
                ;;
            5)
                echo "正在打开配置文件,请保存后退出。"
                vi "$REALM_CONFIG_FILE"
                ;;
            6)
                echo "退出管理菜单。"
                break
                ;;
            *)
                echo "无效的选择。请输入 1 到 6 之间的数字。"
                ;;
        esac
    
        read -p "操作完成。按任意键继续..." -n 1 -s
        clear_screen
    done
    
    echo "脚本已退出。"

    需要将上述代码保存到 /root/realm.sh​

    然后赋予运行权限 chmod +x /root/realm.sh​

    接下来就可通过 ./realm.sh来运行shell脚本了

    realm二进制文件我是选择下载的2.7.0版本,也并没有添加检测更新的功能,如果后续realm发行版更新,还需要手动将下载链接替换以做到更新使用。还有就是为什么说这个是半自动脚本呢,因为还需要自己写realm的转发配置。

    realm转发配置的路径在 /etc/realm/config.toml 需要自行添加转发代码,下面给出模板

    [network]
    no_tcp = false
    use_udp = true
    [[endpoints]]
    # 备注: 
    listen = "[::]:xxxxx"
    remote = "x.x.x.x:xxxxx"
    [[endpoints]]
    # 备注: 
    listen = "[::]:xxxxx"
    remote = "x.x.x.x:xxxxx"
    [[endpoints]]
    # 备注: 
    listen = "0.0.0.0:xxxxx"
    remote = "x.x.x.x:xxxxx"

    添加完转发配置后,运行shell脚本 ./realm.sh 开启转发,并检查运行状态

    此时realm转发就已经配置好了,可以正常使用了。

    本文著作权归作者 [ Miku ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    — END —
    首页微语关于
    Copyright©2025  All Rights Reserved.  Load:0.012 s
    Theme by OneBlog V3.6.4
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。