打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何在CentOS 7再跑一个轻量的ubuntu

这个奇葩需求的由来时,某人要安装的某软件 (TLJH) 只支持 ubuntu 20 及之后版本而且没法走 docker,而 IT 只给了 Centos 7 的虚机(配置 2C4G) 及远程 ssh 权限(有 sudo)。

解决思路就是,在 Centos 7 虚机里面再跑一个轻量级的虚拟环境 lxc,其中运行 ubuntu。

稍微踩了一点坑,所以记录一下。

对于老鸟就是四句话

centos 7 自带 lxc 太古老,ubuntu 模板是 12.04 版本

所以通过 snapd 追上新版本 lxd 安装

lxd 缺省模板有点大,可以用 Proxmox 的小模板节省空间

用 lxd 的端口转发来发布服务

下面是正文

CentOS 7 通过 snapd/lxd 安装 ubuntu 22.04

注:我们将此 Centos 7 称为宿主机或者宿主操作系统

一、预更新 centos7

禁用 selinux

sudo setenforce 0perl -pi -e "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

安装 epel 等

sudo yum -y install epel-release

二、安装 snapd 并通过 snap 安装 lxd

安装 snapd

yum -y install snapd zstd sudo systemctl enable --now snapd.socket

将 snap 相关 binary 加入路径

. /etc/profile

等待几分钟 sndpd 启动,去上个厕所接水

sleep 300

万一网络不好

如果 snapd 报各种网络错误,设法启动一个代理

设置 snap 用代理

sudo snap set system proxy.http="http://localhost:7890"sudo snap set system proxy.https="http://localhost:7890"

用 snap 装新版 lxd

sudo snap install lxd

三、配置新的 lxd

注意将 storage backend 的类型选择用 dir 以保证性能,如果不需要最好关闭 ipv6

sudo `which lxd` initsudo `which lxc` storage list

查看网络,记下新建网络的网段及地址

sudo `which lxc` network list

缺省 lxc 选择的 22.04 镜像有 443M,展开之后 1.1G,叔叔都不能忍。用 proxmox 的 lxc image 仅 125M,展开之后 587M

照例还是可能需要网络加速

wget -c http://download.proxmox.com/images/system/ubuntu-22.04-standard_22.04-1_amd64.tar.zst

导入此镜像为本地可用

cat >metadata.yaml <<eofarchitecture: "x86_64"creation_date: `date +%s`properties:architecture: "x86_64"description: "ubuntu 22.04 from proxmox"os: "ubuntu"release: "22.04"eoftar -cvzf metadata.tar.gz metadata.yamlsudo  var="" lib="" snapd="" snap="" bin="" lxc image import metadata.tar.gz ubuntu-22.04-standard_22.04-1_amd64.tar.zst --alias ubuntu22_px

以此镜像为基础创建并启动新的 lxc

取个名字并记住,比如 u-tljh

sudo /var/lib/snapd/snap/bin/lxc launch ubuntu22_px u-tljh

四 (a)、配置 lxc 及主机端口转发(简单版)

此方式是使用单独的代理进程转发流量到 lxc 中,性能不如后面复杂版的 nat 模式,但是流量不大时要简单很多,建议采用

配置 u-tljh 的网络并测试

因为我们是自定义模板,网络没有自动配置,配置成 dhcp 并获取 ip 地址。以下通过 lxc exec 模式都是在宿主系统中运行

lxc exec u-tljh -- /bin/bash -c "cat >/etc/netplan/01-netcfg.yaml" <<eofnetwork:  version: 2  renderer: networkd  ethernets:    eth0:      dhcp4: trueeoflxc exec u-tljh -- netplan applylxc exec u-tljh --  bin="" ip addr

配置端口转发

下面的取名 port22 是可以随意取的,仅仅用来记录此转发的名称,下面命令将宿主机的 7922 端口转发到 u-tljh 这个 lxc 的 22 端口

lxc config device add u-tljh port22 proxy listen=tcp:0.0.0.0:7922 connect=tcp:127.0.0.1:22

测试执行可通

telnet localhost 7922Trying ::1...Connected to localhost.Escape character is '^]'.SSH-2.0-OpenSSH_8.9p1 Ubuntu-3^]

之后可以通过 ssh 到 7922 端口登录进去或者宿主机上执行下面命令进入 lxc 的 ubuntu 系统来安装各类专用程序如 TLJH 等

lxc exec u-tljh -- /bin/bash

四 (b)、配置 lxc 及主机端口转发(复杂版)

进入此 lxc

执行后会进入 lxc 的 root shell,提示变为 root@localhost

sudo /var/lib/snapd/snap/bin/lxc exec u-tljh /bin/bash

配置此 lxc 的网络,注意网段 10.1.24 改为之前记下来的 lxc 网段

cat >/etc/netplan/01-netcfg.yaml <<eofnetwork:    version: 2    renderer: networkd    ethernets:        eth0:            addresses:                - 10.1.24.10 24            nameservers:                addresses: [223.5.5.5]            routes:                - to: default                  via: 10.1.24.1eofnetplan apply

测试网络是否正常

ping 223.5.5.5exit

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Linux 磁盘管理,挂载分区管理,磁盘分区扩容缩容管理,详细教程
Ubuntu Server CLI专业提示
Ubuntu 20.04 使用原来的软件中心
这个神器真牛 x,HTTPS 数字证书全自动管理
Docker学习笔记:Docker 基础用法和命令帮助
docker
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服