Linux Jail初始化

Jail环境初始化 初始化类似,我想要一个能够方便环线的开发、测试环境,来模拟大规模集群的部署和开发。

Jail环境初始化 不同的是, FreeBSD Linux Jail 多了一步 chroot ,并且进入 Debian 系统之后所有的操作相当于在一个Linux系统中完成

Jail层设置

备注

我发现在Linux层(debian)无法激活sshd服务,但是可以在Jail层激活FreeBSD的sshd服务,所以还是和 Jail环境初始化 一样做ssh初始化

ssh初始化

jail中需要安装 sudo ,这里采用 FreeBSD初始化 中步骤,安装 DevOps 相关工具

d2l jail 安装sudo

# 如果保持物理主机纯净,将所有日常工作、开发和维护环境都迁移到虚拟机和Jail中,那么只安装以下最少软件
# tmux 建议同时安装 terminfo-db 以获取terminfo数据库
pkg install sudo tmux terminfo-db

# 如果直接在物理主机工作,可以补充安装git等工具
# pkg install sudo tmux terminfo-db bash git-lite tree
在jail内部创建admin
# 创建uid为1000的admin组
# 物理主机安装可以跳过,因为installer有一个交互步骤完成了这个工作
pw groupadd admin -g 501

# 创建admin用户
# 物理主机安装可以跳过,因为installer有一个交互步骤完成了这个工作
pw useradd admin -g 501 -u 501 -d /home/admin -m -s /bin/sh

# 将admin用户加入wheel组
pw groupmod wheel -m admin

# 为admin设置密码,不过不是必须的,可以设置ssh key登录
# 物理主机安装可以跳过,因为installer有一个交互步骤完成了这个工作
passwd admin

# 修改 /usr/local/etc/sudoers 设置wheel组用户(也就是admin)无需密码sudo
# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" >> /usr/local/etc/sudoers

# 设置自动启动ssh
sysrc sshd_enable="YES"

Linux层设置

  • 进入 d2l Linux jail,并 chroot :

jexec 结合 chroot 将访问 Debian 系统Linux二进制兼容
jexec d2l chroot /compat/debian /bin/bash

需要确保检查当前确实是Linux环境:

使用 uname 检查Linux环境
uname -s -r -m

输出类似:

使用 uname 检查Linux环境输出
Linux 5.15.0 x86_64

安装必要软件包

类似 Debian精简系统初始化 ,但针对 FreeBSD Linux Jail 环境附加安装一些软件包

安装Linux Jail软件包
# dnsutils: dig nslookup
# netcat: nc
apt install sudo file dnsutils netcat-openbsd unzip

admin帐号

  • d2l Linux jail中创建用户组和用户admin:

Linux jail中创建用户组和用户admin
# 创建uid为1000的admin组
groupadd -g 1000 admin

# 创建admin用户 (/home/admin目录已经存在)
useradd -g 1000 -u 1000 -d /home/admin -s /bin/bash admin

# 安装sudo
apt install -y sudo curl

# 设置admin组用户(也就是admin)无需密码sudo
echo "%admin ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers.d/admin

# set TIMEZONE to Shanghai
unlink /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ssh登录

完成上述 jail 层 和 linux 层设置之后,现在可以在host上通过 ssh 先登录到 jail 中,然后再 chroot 进入Linux:

ssh 先登录到 jail 中,然后再 chroot 进入Linux
# 以 admin 用户身份登录 d2l jail之后
sudo chroot /compat/debin /bin/bash

# 这里可能需要在host主机上修订 /usr/local/jails/containers/d2l/compat/debian/etc/profile (默认是600)
# chmod 644 /usr/local/jails/containers/d2l/compat/debian/etc/profile

# 然后再次sudo成admin用户(Linux系统)
sudo - admin

# 接下来就可以在Linux中正常操作

安装python virtualenv(可选)

安装python
# 安装python
sudo apt install python3 python3-pip

venv初始化
cd ~
python3 -m venv venv3
  • 激活:

激活venv
# bash 使用 activate
source venv3/bin/activate

# csh 使用 activate.csh
# source venv3/bin/activate.csh

安装Conda(可选)

备注

安装Conda 包含了完整 Python 运行环境,所以主机(jail)环境不需要安装Python

安裝miniconda
# x86_64版本 
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o Miniconda3-latest-Linux-x86_64.sh
# ARM 64位版本
# curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -o Miniconda3-latest-Linux-aarch64.sh

# 修订运行权限并安装
chmod 755 Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
  • 在同意了license之后,按照提示进行安装

交互方式安装
Do you accept the license terms? [yes|no]
>>> yes

Miniconda3 will now be installed into this location:
/home/admin/miniconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/admin/miniconda3] >>> /home/admin/conda
...
Downloading and Extracting Packages:

Preparing transaction: done
Executing transaction: done
installation finished.
Do you wish to update your shell profile to automatically initialize conda?
This will activate conda on startup and change the command prompt when activated.
If you'd prefer that conda's base environment not be activated on startup,
   run the following command when conda is activated:

conda config --set auto_activate_base false

You can undo this by running `conda init --reverse $SHELL`? [yes|no]
[no] >>> yes
no change     /home/admin/conda/condabin/conda
no change     /home/admin/conda/bin/conda
no change     /home/admin/conda/bin/conda-env
no change     /home/admin/conda/bin/activate
no change     /home/admin/conda/bin/deactivate
no change     /home/admin/conda/etc/profile.d/conda.sh
no change     /home/admin/conda/etc/fish/conf.d/conda.fish
no change     /home/admin/conda/shell/condabin/Conda.psm1
no change     /home/admin/conda/shell/condabin/conda-hook.ps1
no change     /home/admin/conda/lib/python3.12/site-packages/xontrib/conda.xsh
no change     /home/admin/conda/etc/profile.d/conda.csh
modified      /home/admin/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

Thank you for installing Miniconda3!