[ Technical exchange] 有大神能用玲珑打包一个17的pgsql吗
Tofloor
poster avatar
Vellichor
deepin
2025-10-31 12:54
Author

我想用pgsql17但是deepin包里没有,有人能帮帮忙吗?或者教教我怎么用玲珑我自己试试做

Reply Favorite View the author
All Replies
神末shenmo
deepin
Spark-App
Q&A Team
2025-10-31 13:11
#1

https://bbs.deepin.org.cn/post/291256

用这个装

Reply View the author
我白说了
deepin
2025-10-31 13:34
#2

https://linyaps.org.cn/contributionguidelines 自己动手丰衣足食

Reply View the author
Vellichor
deepin
2025-10-31 13:45
#3
神末shenmo

https://bbs.deepin.org.cn/post/291256

用这个装

子系统试过了,也没有17的包,我只知道最新的debian13有这个包,但debian13没有子系统

Reply View the author
Vellichor
deepin
2025-10-31 13:47
#4
我白说了

https://linyaps.org.cn/contributionguidelines 自己动手丰衣足食

有没有更详细、系统的教程找了好几个,但是太散太乱根本看不懂

Reply View the author
把一切操作变成GUI
deepin
Backbone of ecological co-construction group
2025-10-31 14:01
#5

你确定安装在容器里面你也能连接数据库吗?

Reply View the author
森林的天空
deepin
2025-10-31 14:01
#6

你学一下docker啊,学完了直接去镜像站点拉各种打包好的镜像,数据库的,操作系统的,啥没有,何必要

折腾玲珑去搞这些啊。

Reply View the author
邋遢真人
deepin
2025-10-31 15:19
#7

可以确定docker有17的镜像

image.png

我用的是14版本的

image.png

很方便的,AI搜一个安装docker并且使用docker安装postgreSQL

Reply View the author
邋遢真人
deepin
2025-10-31 15:20
#8

docker
image.png

Reply View the author
Vellichor
deepin
2025-10-31 15:49
#9
把一切操作变成GUI

你确定安装在容器里面你也能连接数据库吗?

docker是可以的,玲珑不可以吗?

Reply View the author
Vellichor
deepin
2025-10-31 15:52
#10
森林的天空

你学一下docker啊,学完了直接去镜像站点拉各种打包好的镜像,数据库的,操作系统的,啥没有,何必要

折腾玲珑去搞这些啊。

我知道docker里有我也会,但是docker安装配置太麻烦了,我想试试玲珑行不行

Reply View the author
锵锵枪ᯤ
deepin
2025-10-31 17:03
#11

这种用docker 。玲珑解决的是桌面软件,没必要折腾。

Reply View the author
梦小鹿_ ღ
deepin
2025-11-01 23:59
#12

666

Reply View the author
manton94
deepin
2025-11-02 18:09
#13

6,docker安装还麻烦

Reply View the author
阿刀
deepin
2025-11-03 22:22
#14

刚好我几天前因为iptables洁癖基于systemd-nspawn 写了一个简单的调用脚本,

  1. 去 https://images.linuxcontainers.org/images 下载需要的 rootfs 文件
  2. 使用root解压到指定目录
  3. 修改下 VIR_CONTAINERS 中的调用名称/路径/备注
  4. 运行 docker.sh
    #!/bin/bash
    # systemd-nspawn  Linux 容器
    # Author: Aknife(https://aknife.cn)
    # Update: 2025/10/23
    
    # ========== 容器配置 ==========
    # 格式: "容器名称|容器路径|备注"
    VIR_CONTAINERS=(
        "lnmp|$HOME/Object/Virtual/lnmp|LNMP 环境"
    )
    
    # ========== Systemd容器管理函数 ==========
    check_systemd_nspawn() {
        if ! command -v systemd-nspawn &> /dev/null; then
            echo "正在安装 systemd-nspawn..."
            sudo apt update && sudo apt install -y systemd-container
            if [ $? -ne 0 ]; then
                echo "安装 systemd-nspawn 失败"
                exit 1
            fi
            echo "systemd-nspawn 安装成功"
        fi
    }
    
    # ======= 创建桥接网络 =======
    create_bridge() {
        BRIDGE_NAME="dockerNet"
        BRIDGE_ADDR="10.0.0.1/24"
    
        # 检查桥接是否已存在
        if ! ip link show "$BRIDGE_NAME" >/dev/null 2>&1; then
            echo "创建桥接 $BRIDGE_NAME..."
            sudo ip link add name "$BRIDGE_NAME" type bridge
            sudo ip addr add "$BRIDGE_ADDR" dev "$BRIDGE_NAME"
            sudo ip link set "$BRIDGE_NAME" up
            echo "桥接 $BRIDGE_NAME 已创建,IP: $BRIDGE_ADDR"
    
            # 检测物理网卡
            echo "正在检测可用物理网卡..."
            all_ifaces=($(ls /sys/class/net | grep -v -E "lo|$BRIDGE_NAME|docker|veth"))
    
            if [ ${#all_ifaces[@]} -eq 0 ]; then
                echo "未找到物理网卡,请手动配置 NAT"
                return
            fi
    
            # 只获取启用状态的物理网卡
            up_ifaces=()
            for iface in "${all_ifaces[@]}"; do
                state=$(cat "/sys/class/net/$iface/operstate" 2>/dev/null)
                if [[ "$state" == "up" ]]; then
                    up_ifaces+=("$iface")
                fi
            done
    
            # 根据已启用的网卡数量决定策略
            if [ ${#up_ifaces[@]} -eq 1 ]; then
                selected_iface=${up_ifaces[0]}
                echo "检测到单一 UP 网卡: $selected_iface,将作为 NAT 出口"
            elif [ ${#up_ifaces[@]} -gt 1 ]; then
                echo "检测到多个 UP 网卡,请选择作为 NAT 出口:"
                select iface in "${up_ifaces[@]}"; do
                    if [[ -n "$iface" ]]; then
                        selected_iface="$iface"
                        break
                    fi
                done
            else
                echo "未检测到处于 UP 状态的网卡,请选择一个物理网卡作为 NAT 出口:"
                select iface in "${all_ifaces[@]}"; do
                    if [[ -n "$iface" ]]; then
                        selected_iface="$iface"
                        break
                    fi
                done
            fi
    
            # 开启 IP 转发
            echo "开启 IP 转发..."
            sudo sysctl -w net.ipv4.ip_forward=1
    
            # 配置 NAT 规则
            echo "配置 NAT 规则,将 $BRIDGE_NAME 流量转发到 $selected_iface ..."
            if ! sudo iptables -t nat -C POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE 2>/dev/null; then
                sudo iptables -t nat -A POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE
            fi
    
            # FORWARD 规则
            if ! sudo iptables -C FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT 2>/dev/null; then
                sudo iptables -A FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT
            fi
            if ! sudo iptables -C FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT 2>/dev/null; then
                sudo iptables -A FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT
            fi
    
            echo "网络桥接 $BRIDGE_NAME 配置完成,容器可通过 NAT 出口 $selected_iface 上网"
        fi
    }
    
    
    delete_bridge() {
        BRIDGE_NAME="dockerNet"
        BRIDGE_ADDR="10.0.0.1/24"
    
        # 检测物理网卡
        interfaces=($(ls /sys/class/net | grep -v -E "lo|$BRIDGE_NAME|docker|veth"))
        selected_iface=${interfaces[0]}
    
        # 删除 NAT 规则
        if sudo iptables -t nat -C POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE 2>/dev/null; then
            sudo iptables -t nat -D POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE
            echo "已删除 NAT 规则"
        fi
    
        # 删除 FORWARD 规则
        if sudo iptables -C FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT 2>/dev/null; then
            sudo iptables -D FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT
            echo "已删除 FORWARD 出站规则"
        fi
        if sudo iptables -C FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT 2>/dev/null; then
            sudo iptables -D FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT
            echo "已删除 FORWARD 入站规则"
        fi
    
        # 删除网桥
        if ip link show "$BRIDGE_NAME" >/dev/null 2>&1; then
            sudo ip link set "$BRIDGE_NAME" down
            sudo ip link delete "$BRIDGE_NAME" type bridge
            echo "已删除网桥 $BRIDGE_NAME"
        else
            echo "网桥 $BRIDGE_NAME 不存在"
        fi
    }
    
    # ========== 主逻辑 ==========
    case "$1" in
        "list")
            check_systemd_nspawn
            create_bridge
            # 显示所有容器状态
            echo "容器列表:"
            echo "-------------------------------------------"
            for container in "${VIR_CONTAINERS[@]}"; do
                name=$(echo "$container" | cut -d'|' -f1)
                path=$(echo "$container" | cut -d'|' -f2)
                desc=$(echo "$container" | cut -d'|' -f3)
    
                printf "%-15s %-20s " "$name" "$desc"
    
                if [ -d "$path" ]; then
                    if pgrep -f "systemd-nspawn.*-D.*$path" > /dev/null; then
                        echo "[运行中]"
                    else
                        echo "[未运行]"
                    fi
                fi
            done
            echo "-------------------------------------------"
            ;;
    
        "start")
            target="$2"
            found=false
    
            for container in "${VIR_CONTAINERS[@]}"; do
                name=$(echo "$container" | cut -d'|' -f1)
                path=$(echo "$container" | cut -d'|' -f2)
    
                if [ "$name" = "$target" ]; then
                    found=true
                    # 检查是否在运行
                    if pgrep -f "systemd-nspawn.*-D.*$path" > /dev/null; then
                        echo "容器 '$name' 已经在运行中"
                    else
                        if [ -d "$path" ]; then
                            echo "启动容器: $name"
                            sudo setsid systemd-nspawn -D "$path" --boot --network-veth --network-bridge="dockerNet" --quiet > "/tmp/container-${name}.log" 2>&1 &
                        fi
                    fi
                    break
                fi
            done
            ;;
    
        "run")
            target="$2"
            found=false
    
            for container in "${VIR_CONTAINERS[@]}"; do
                name=$(echo "$container" | cut -d'|' -f1)
                path=$(echo "$container" | cut -d'|' -f2)
    
                if [ "$name" = "$target" ]; then
                    found=true
                    if [ -d "$path" ]; then
                        echo "进入容器: $name"
                        # 找到 nspawn 主进程
                        nspawn_pid=$(pgrep -f "systemd-nspawn.*$path" | head -n1)
    
                        if [ -n "$nspawn_pid" ]; then
                            init_pid=$(pgrep -P "$nspawn_pid" | head -n1)
    
                            if [ -n "$init_pid" ]; then
                                sudo nsenter -t "$init_pid" -a /bin/bash
                            else
                                echo "容器未在运行,请先启动容器: $name"
    
                            fi
                        else
                            echo "容器未在运行,请先启动容器: $name"
                        fi
                    fi
                    break
                fi
            done
            ;;
    
        "stop")
            target="$2"
            found=false
    
            for container in "${VIR_CONTAINERS[@]}"; do
                name=$(echo "$container" | cut -d'|' -f1)
                path=$(echo "$container" | cut -d'|' -f2)
    
                if [ "$name" = "$target" ]; then
                    found=true
                    if pgrep -f "systemd-nspawn.*-D.*$path" > /dev/null; then
                        sudo pkill -f "systemd-nspawn.*-D.*$path"
                        echo "容器 '$name' 已停止"
                    else
                        echo "容器 '$name' 未在运行"
                    fi
                    break
                fi
            done
            ;;
        "delnet")
            delete_bridge
            ;;
        *)
            if [ -z "$1" ]; then
                echo "容器管理命令:"
                echo "  list          容器列表"
                echo "  start         启动容器"
                echo "  stop          停止容器"
                echo "  run           进入容器"
                echo "  delnet        删除网络"
                echo ""
                exit 1
            fi
            ;;
    esac
    
    
    
    
    

大概使用记录



aknife@Deepin25:~$ docker 
容器管理命令:
  list          容器列表
  start         启动容器
  stop          停止容器
  run           进入容器
  delnet        删除网卡

aknife@Deepin25:~$ docker list
创建桥接 dockerNet...
桥接 dockerNet 已创建,IP: 10.0.0.1/24
正在检测可用物理网卡...
检测到单一 UP 网卡: enp0s31f6,将作为 NAT 出口
开启 IP 转发...
net.ipv4.ip_forward = 1
配置 NAT 规则,将 dockerNet 流量转发到 enp0s31f6 ...
网络桥接 dockerNet 配置完成,容器可通过 NAT 出口 enp0s31f6 上网
容器列表:
-------------------------------------------
lnmp            LNMP 环境          [未运行]
-------------------------------------------

aknife@Deepin25:~$ docker list
容器列表:
-------------------------------------------
lnmp            LNMP 环境          [未运行]
-------------------------------------------

aknife@Deepin25:~$ docker start lnmp
启动容器: lnmp

aknife@Deepin25:~$ docker list
容器列表:
-------------------------------------------
lnmp            LNMP 环境          [运行中]
-------------------------------------------

aknife@Deepin25:~$ docker run lnmp
进入容器: lnmp
root@lnmp:/# exit
exit

aknife@Deepin25:~$ docker stop lnmp
容器 'lnmp' 已停止

aknife@Deepin25:~$ docker list
容器列表:
-------------------------------------------
lnmp            LNMP 环境          [未运行]
-------------------------------------------

aknife@Deepin25:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination   

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination   
ACCEPT     all  --  10.0.0.0/24          anywhere  
ACCEPT     all  --  anywhere             10.0.0.0/24          state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

aknife@Deepin25:~$ docker delnet
已删除 NAT 规则
已删除 FORWARD 出站规则
已删除 FORWARD 入站规则
已删除网桥 dockerNet

aknife@Deepin25:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination   

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination   

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

Reply View the author