【Linux-搞机】阿里云添加麒麟V10x86架构的镜像

2026-04-29 10:592阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

1. 背景

两年前,由于项目上国产化的推进,很多项目现场需要我们适配国产化系统。公司为了节约成本进行测试,需要我提供国产化机器并测试我们的系统并调优。

要知道,在云平台,单单是使用单个国产化的镜像就需要300¥/月,而我们的系统需要大集群支持,累计的镜像成本无疑是一笔巨额的开支。

第一次接到这个任务是要求的arm的国产系统系统,后面再次接到该任务需要x86的,过程是差不多的,所以我写了文档记录了过程并分享,希望能够帮助到需要“解决成本”的你。

2. 下载镜像包上传对象存储

如何安装配置ossutil?

Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

阿里云-安装ossutil

AMD64版本:

https://iso.kylinos.cn/web_pungi/download/cdn/9D2GPNhvxfsF3BpmRbJjlKu0dowkAc4i/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso

海光64版本:

https://iso.kylinos.cn/web_pungi/download/cdn/9D2GPNhvxfsF3BpmRbJjlKu0dowkAc4i/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso

上传AMD64版本:

D:\Virtualtools\ossutil-v1.7.19-windows-amd64>ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_amd.iso oss://images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64\shanghaiconfig

ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_amd.iso oss://juphoon-images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64\shanghaiconfig

上传海光64版本:

D:\Virtualtools\ossutil-v1.7.19-windows-amd64>ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_haiguang.iso oss://images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64shanghaiconfig

ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_haiguang.iso oss://juphoon-images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64\shanghaiconfig

3. 系统刻盘

先用oss创建自定义镜像,利用该镜像创建实例并额外挂载一块数据盘,注意系统盘和数据盘创建的时候都设置成不随实例释放(方便后面卸载);

进入系统安装系统,将系统安装在数据盘中。
image1920×1224 173 KB

账号:root

密码:xxxxxxxxxxxxx

安装成功后直接关机这个实例,卸载他的系统盘和数据盘,改名字或者打个标签以免找不到了。

随便创建一个centos的实例,挂载这两个盘,使用dd命令将额外挂载的数据盘数据全部写入到额外挂载的系统盘中

[root@iZuf6g3ivu81z9d7fpldmcZ ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 40G 0 disk ├─vdb1 253:17 0 1G 0 part └─vdb2 253:18 0 39G 0 part vdc 253:32 0 40G 0 disk ├─vdc1 253:33 0 4.4G 0 part └─vdc2 253:34 0 8.9M 0 part # vdb是额外的数据盘,vdc是额外的系统盘 [root@iZuf6g3ivu81z9d7fpldmcZ ~]# dd if=/dev/vdb of=/dev/vdc bs=1M status=progress 42909827072 bytes (43 GB) copied, 451.840663 s, 95.0 MB/s 40960+0 records in 40960+0 records out 42949672960 bytes (43 GB) copied, 454.86 s, 94.4 MB/s [root@iZuf6g3ivu81z9d7fpldmcZ ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 40G 0 disk ├─vdb1 253:17 0 1G 0 part └─vdb2 253:18 0 39G 0 part vdc 253:32 0 40G 0 disk ├─vdc1 253:33 0 1G 0 part └─vdc2 253:34 0 39G 0 part

将系统盘挂回去麒麟v10的机器,释放centos机器并且释放磁盘。

4. 优化系统适配阿里云

4.1. 设置系统网络默认为eth0

  1. 修改网卡名

使用ifconfig查看需要修改的网卡名称(以enp1s0为例),在/etc/sysconfig/network-scripts/ 下找到ifcfg-ens6 文件,使用如下命令修改文件名

[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ls ifcfg-ens6 [root@localhost network-scripts]# mv ifcfg-ens6 ifcfg-eth0 [root@localhost network-scripts]# vi ifcfg-eth0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=4848f4cb-fe18-4ac3-ba67-6079a14459ad DEVICE=eth0 ONBOOT=yes [root@localhost network-scripts]# ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:06:56:0c brd ff:ff:ff:ff:ff:ff inet 172.24.183.83/20 brd 172.24.191.255 scope global dynamic noprefixroute ens6 valid_lft 315359922sec preferred_lft 315359922sec inet6 fe80::3c81:7247:acac:79dc/64 scope link noprefixroute valid_lft forever preferred_lft forever

  1. 修改规则

/etc/udev/rules.d 下找到规则文件 75-network.rules (如果没有就新建)
修改内容如下:

"00:16:3e:06:56:0c"替换成你自己ip a s中"00:16:3e:06:56:0c"的值。

[root@localhost network-scripts]# cd /etc/udev/rules.d [root@localhost rules.d]# vi 75-network.rules SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:16:3e:06:56:0c", NAME="eth0"

其中ATTR后面的值为ens6网卡对应的MAC地址,NAME后面的值为要修改后的网卡名称。

  1. 配置镜像生成实例采用eth0

编辑 grub 配置文件

# 为GRUB_CMDLINE_LINUX变量增加2个参数,具体内容如下: # net.ifnames=0 biosdevname=0 [root@localhost rules.d]# vi /etc/sysconfig/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashkernel=1024M,high audit=0 net.ifnames=0 biosdevname=0" GRUB_DISABLE_RECOVERY="true"

重新生成 grub 配置文件

# UEFI启动模式 sudo grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg # BIOS(Legacy)启动模式(我这里是BIOS) sudo grub2-mkconfig -o /boot/grub2/grub.cfg

重启连接查看网卡

[root@localhost ~]# ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:06:56:0c brd ff:ff:ff:ff:ff:ff inet 172.24.183.83/20 brd 172.24.191.255 scope global dynamic noprefixroute eth0 valid_lft 315359940sec preferred_lft 315359940sec inet6 fe80::3c81:7247:acac:79dc/64 scope link noprefixroute valid_lft forever preferred_lft forever

4.2. 安装cloud-init

参考:

阿里云文档-制作Linux镜像文件

阿里云文档-安装cloud-init

  1. 确保源服务器已安装Python PIP依赖库。

以安装Python3-pip依赖库为例,Linux部分发行版的安装命令如下。

CentOS/Red Hat Enterprise Linux Ubuntu/DebianOpenSUSE/SUSE

yum和wget前先确保该服务器已经开通公网

sudo yum -y install python3-pip

  1. 运行以下命令下载阿里云版cloud-init。

wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz

  1. 运行以下命令解压cloud-init安装包到当前目录。

tar -zxvf cloud-init-19.1.21.tgz

  1. 进入cloud-init目录下,并安装依赖库。

cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt

这里可能会报错,就是下的太慢了,timeout了,重新在下一下就好了pip3 install -r ./requirements.txt

  1. 进入cloud-init的tools目录。

cd ./tools

  1. 运行以下命令执行安装cloud-init的脚本deploy.sh。

说明: 麒麟v10版本是基于CentOS8基础上构建,并且官方无麒麟版本安装,所以指定centos 8进行安装 # sudo bash ./deploy.sh <issue> <major_version> bash ./deploy.sh centos 8

确认cloud-init是否安装成功。

若返回"description": "success" ,表示安装成功。

4.3. 安装virtio驱动

为避免部分服务器、虚拟机或者云主机的操作系统在导入自定义镜像后,创建的ECS实例无法启动,您需要在导入镜像前检查是否需要在源服务器中安装virtio驱动。

检查服务器内核是否支持virtio驱动

运行以下命令,检查当前操作系统内核是否支持virtio驱动,以判断是否需要为自定义镜像安装virtio驱动或将virtio驱动添加到临时文件系统。

grep -i virtio /boot/config-$(uname -r)

image1864×847 185 KB

根据回显信息判断:

根据输出信息中的参数CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET 的取值判断:

  • 取值均为 y :已正确安装virtio驱动,可直接执行相关文档。
  • 没有这两个参数 :未安装virtio驱动,需要手动安装。具体操作,请参见安装virtio驱动。

取值均为 m /取值一个为y一个为m :支持virtio驱动,还需运行以下命令,判断virtio驱动是否已添加到临时文件系统。

  • 取值均为 m :运行以下命令,判断virtio驱动是否已添加到临时文件系统。

  • 取值一个为y一个为m :为y的驱动已经编译到内核中且正确安装,还需运行以下命令,判断为m的virtio驱动是否已添加到临时文件系统。

  • CentOS系列 Ubuntu/Debian系列

lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

image1920×160 119 KB

  • 如上图所示,表示virtio驱动已经添加到临时文件系统中,可直接执行相关文档。
  • 否则,需将virtio驱动添加到临时文件系统。如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET 参数的取值一个为y一个为m ,则只需要判断取值为m 的驱动是否已添加到临时文件系统。

参考文档:

阿里云文档-如何为已有自定义镜像安装NVMe驱动?

安装NVMe驱动

a. 运行以下命令,查看系统内核是否已经加载了NVMe驱动。

cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"

image1920×760 167 KB

已经加载

b. 运行以下命令,查看initramfs中是否包含NVMe驱动。

sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

image2836×336 138 KB

不包含

c. 依次运行以下命令,使initramfs支持NVMe驱动。

mkdir -p /etc/dracut.conf.d echo 'add_drivers+=" nvme nvme-core "' | sudo tee /etc/dracut.conf.d/nvme.conf > /dev/null sudo dracut -v -f

d. 在GRUB中添加NVMe相关的io_timeout 参数。

按i键进入编辑模式,在GRUB_CMDLINE_LINUX= 一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 参数信息。

sudo vi /etc/default/grub

[root@iZuf6hwfrhipchovcflmzwZ ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashkernel=1024M,high audit=0 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295" GRUB_DISABLE_RECOVERY="true"

e. 运行以下命令,使配置的GRUB生效。

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

f. 重新运行以下命令,查看是否有NVMe相关的返回信息。

sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

image1920×254 150 KB

好了

4.4. 安装growpart包

安装growpart包使镜像支持在线扩容文件系统,安装后在初始化时会将根分区及文件系统扩容,扩容至实际的系统盘大小。更多信息请参见扩容分区和文件系统(Linux) 。

yum -y install cloud-utils-growpart.x86_64

4.5. 安装云助手客户端

参考:阿里云文档-在ECS实例中安装云助手Agent

云助手是专为云服务器ECS打造的原生自动化运维工具,阿里云建议您为镜像安装云助手服务,实现云上ECS高效运维

sudo wget "https://aliyun-client-assist.oss-accelerate.aliyuncs.com/linux/aliyun_assist_latest.rpm" sudo rpm -ivh --force aliyun_assist_latest.rpm

4.6. 安装云安全中心Agent

参考文档:阿里云文档-安装云安全中心客户端

安装云安全中心的Agent插件后,您的服务器才能受到云安全中心的保护。

  1. 操作步骤
  • 登录云安全中心控制台。在左侧导航栏,选择系统配置 > 功能设置。
  • 在客户端页签的未安装客户端子页签下的待安装Agent的服务器列表,单击要安装Agent的服务器操作列的安装客户端,为该服务器安装Agent。
  • 您也可以选中多台服务器,单击左下角 一键安装,批量安装Agent。
  • Agent插件安装完成约5分钟后,您即可在 资产中心 > 主机资产页面的服务器页签下,查看服务器的 客户端在线情况。已安装Agent的服务器 客户端列的 客户端离线图标会变为 客户端在线图标,表示该服务器已受到云安全中心的安全防护。

image1920×985 167 KB

  1. 操作命令(我在控制台装的,就没用下面的命令了)

wget "https://update2.aegis.aliyun.com/download/install/2.0/linux/AliAqsInstall.sh" && chmod +x AliAqsInstall.sh && ./AliAqsInstall.sh -k=bE**** -r

4.7. 系统配置

参考文档:

阿里云文档-阿里云镜像规范(Linux)

  • 配置时钟

timedatectl status timedatectl set-local-rtc 0

  • 配置SSHD服务

在制作镜像过程中,需要配置SSHD服务。

SSHD服务是Linux系统中的一个服务,用于远程登录和管理Linux系统。SSHD服务通常使用SSH协议(Secure Shell)进行加密通信,以保证远程登录的安全性。修改/etc/ssh/sshd_config 中的配置示例如下:

UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yes

  • 配置Chrony/NTP服务

在制作镜像过程中,建议您配置Chrony服务或者NTP服务,配置其中一个服务即可。

Chrony和NTP都是用于同步计算机时钟的网络协议,可以确保时钟同步,以避免时间误差导致的问题。示例命令如下:

chrony_file=/etc/chrony.conf cat >$chrony_file <<EOF # Use Alibaba NTP server # Public NTP # Alicloud NTP server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst # Ignore stratum in source selection. stratumweight 0.05 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. #allow 192.168/16 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # Disable logging of client accesses. noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. logchange 0.5 logdir /var/log/chrony #log measurements statistics tracking EOF

  • 配置MOTD服务

在制作镜像过程中,建议您配置MOTD(Message of the Day)服务。

MOTD服务是Linux系统中的一项功能,它可以在用户登录到系统后显示一条欢迎信息或者系统公告。示例命令如下:

echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motd

  • 关闭Firewalld服务

在制作镜像过程中,建议您关闭Firewalld服务。Firewalld是一种在Linux系统中管理防火墙规则的服务,云上有安全组做安全防护,您可以关闭防火墙。示例命令如下:

systemctl disable firewalld --now

  • 配置PIP源

如果系统存在PIP源配置,推荐使用阿里云的PIP源地址,以便从阿里云的源中获取到最新的软件包。配置~/.pip/pip.conf 文件的内容如下:

[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com

  • 配置sysctl

在制作镜像过程中,建议您配置sysctl参数,便于调整和优化Linux内核的运行参数。

修改/etc/sysctl.conf 内容如下。

阿里云建议配置

vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0

实际配置

[root@localhost ~]# cat /etc/sysctl.conf # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). # kernel.sysrq=0 net.ipv4.ip_forward=0 net.ipv4.conf.all.send_redirects=0 net.ipv4.conf.default.send_redirects=0 net.ipv4.conf.all.accept_source_route=0 net.ipv4.conf.default.accept_source_route=0 net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.default.accept_redirects=0 net.ipv4.conf.all.secure_redirects=0 net.ipv4.conf.default.secure_redirects=0 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_responses=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.conf.default.rp_filter=1 net.ipv4.tcp_syncookies=1 kernel.dmesg_restrict=1 net.ipv6.conf.all.accept_redirects=0 net.ipv6.conf.default.accept_redirects=0 # modified kernel.sysrq=1 # newconfig vm.swappiness=0

内核参数相关解释

sysctl -p 命令使内核参数修改生效。

  • 关闭selinux

setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

  • 关闭系统限制

vi /etc/security/limits.conf * soft nofile 1048576 * hard nofile 1048576 * soft nproc 100000 * hard nproc 100000 * soft core unlimited

修改前

[root@localhost ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7422 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 7422 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

修改后

[root@iZuf6hwfrhipchovcflmzwZ ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7422 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1048576 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 100000 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

  • 修改密码安全策略

[root@localhost ~]# cd /etc/security [root@localhost security]# cp pwquality.conf pwquality.conf.bak # 原有配置 [root@localhost security]# grep -v "#" pwquality.conf minlen = 8 dcredit = 0 ucredit = 0 lcredit = 0 ocredit = 0 minclass = 3 palindrome # 修改后配置 [root@localhost security]# grep -v "#" pwquality.conf minlen = 6 # 将密码的最小长度设置为 6 个字符 dcredit = 0 # 不强制要求数字 ucredit = 0 # 不强制要求大写字母 lcredit = 0 # 不强制要求小写字母 ocredit = 0 # 不强制要求特殊字符 minclass = 0 # 不强制要求不同类型的字符 usercheck = 0 # 不检查密码中是否含有用户名 palindrome # 禁止使用回文密码

  • 清空历史命令

history -c

5. 最终镜像

最后将该实例关机,创建成新的镜像,上传oss方便下载或其他环境使用

6. 参考文档

  1. 创建虚拟机并安装Linux操作系统

安装麒麟Kylin-v10 Arm64版本到阿里云

qemu虚拟机 安装银河麒麟V10 arm架构系统 桌面版

win10安装,qemu虚拟机,搭建麒麟操作系统开发环境

阿里云-创建虚拟机并安装Linux操作系统

  1. 自定义镜像-阿里云规范

阿里云文档-阿里云镜像规范(Linux)

VirtualBox 制作自定义的阿里云镜像方法

阿里云-安装cloud-init

阿里云-安装virtio驱动

  1. 工具

Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

阿里云-安装ossutil

网友解答:
--【壹】--:

在2027前赶紧学习了,不然到时找不到应对


--【贰】--:

这篇文章可能大部分读者都用不上,也不会去关心作者写了什么。但我相信有一天,一个像两年前的我那样到处找资料完成"云平台自制镜像"任务的朋友会惊喜的在本站发现这么一篇文章。


--【叁】--:

插个眼,业务相关经常装/重装各种国产类unix系统。我在想可不可以上层统一管理一下,一次直接搞一批机器。

问题描述:

1. 背景

两年前,由于项目上国产化的推进,很多项目现场需要我们适配国产化系统。公司为了节约成本进行测试,需要我提供国产化机器并测试我们的系统并调优。

要知道,在云平台,单单是使用单个国产化的镜像就需要300¥/月,而我们的系统需要大集群支持,累计的镜像成本无疑是一笔巨额的开支。

第一次接到这个任务是要求的arm的国产系统系统,后面再次接到该任务需要x86的,过程是差不多的,所以我写了文档记录了过程并分享,希望能够帮助到需要“解决成本”的你。

2. 下载镜像包上传对象存储

如何安装配置ossutil?

Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

阿里云-安装ossutil

AMD64版本:

https://iso.kylinos.cn/web_pungi/download/cdn/9D2GPNhvxfsF3BpmRbJjlKu0dowkAc4i/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso

海光64版本:

https://iso.kylinos.cn/web_pungi/download/cdn/9D2GPNhvxfsF3BpmRbJjlKu0dowkAc4i/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso

上传AMD64版本:

D:\Virtualtools\ossutil-v1.7.19-windows-amd64>ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_amd.iso oss://images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64\shanghaiconfig

ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_amd.iso oss://juphoon-images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64\shanghaiconfig

上传海光64版本:

D:\Virtualtools\ossutil-v1.7.19-windows-amd64>ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_haiguang.iso oss://images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64shanghaiconfig

ossutil cp D:\Virtualmachines\Kylin-Server-V10-SP3-2403-Release-20240426-x86_64_haiguang.iso oss://juphoon-images -c D:\Virtualtools\ossutil-v1.7.19-windows-amd64\shanghaiconfig

3. 系统刻盘

先用oss创建自定义镜像,利用该镜像创建实例并额外挂载一块数据盘,注意系统盘和数据盘创建的时候都设置成不随实例释放(方便后面卸载);

进入系统安装系统,将系统安装在数据盘中。
image1920×1224 173 KB

账号:root

密码:xxxxxxxxxxxxx

安装成功后直接关机这个实例,卸载他的系统盘和数据盘,改名字或者打个标签以免找不到了。

随便创建一个centos的实例,挂载这两个盘,使用dd命令将额外挂载的数据盘数据全部写入到额外挂载的系统盘中

[root@iZuf6g3ivu81z9d7fpldmcZ ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 40G 0 disk ├─vdb1 253:17 0 1G 0 part └─vdb2 253:18 0 39G 0 part vdc 253:32 0 40G 0 disk ├─vdc1 253:33 0 4.4G 0 part └─vdc2 253:34 0 8.9M 0 part # vdb是额外的数据盘,vdc是额外的系统盘 [root@iZuf6g3ivu81z9d7fpldmcZ ~]# dd if=/dev/vdb of=/dev/vdc bs=1M status=progress 42909827072 bytes (43 GB) copied, 451.840663 s, 95.0 MB/s 40960+0 records in 40960+0 records out 42949672960 bytes (43 GB) copied, 454.86 s, 94.4 MB/s [root@iZuf6g3ivu81z9d7fpldmcZ ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 40G 0 disk ├─vdb1 253:17 0 1G 0 part └─vdb2 253:18 0 39G 0 part vdc 253:32 0 40G 0 disk ├─vdc1 253:33 0 1G 0 part └─vdc2 253:34 0 39G 0 part

将系统盘挂回去麒麟v10的机器,释放centos机器并且释放磁盘。

4. 优化系统适配阿里云

4.1. 设置系统网络默认为eth0

  1. 修改网卡名

使用ifconfig查看需要修改的网卡名称(以enp1s0为例),在/etc/sysconfig/network-scripts/ 下找到ifcfg-ens6 文件,使用如下命令修改文件名

[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ls ifcfg-ens6 [root@localhost network-scripts]# mv ifcfg-ens6 ifcfg-eth0 [root@localhost network-scripts]# vi ifcfg-eth0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=4848f4cb-fe18-4ac3-ba67-6079a14459ad DEVICE=eth0 ONBOOT=yes [root@localhost network-scripts]# ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:06:56:0c brd ff:ff:ff:ff:ff:ff inet 172.24.183.83/20 brd 172.24.191.255 scope global dynamic noprefixroute ens6 valid_lft 315359922sec preferred_lft 315359922sec inet6 fe80::3c81:7247:acac:79dc/64 scope link noprefixroute valid_lft forever preferred_lft forever

  1. 修改规则

/etc/udev/rules.d 下找到规则文件 75-network.rules (如果没有就新建)
修改内容如下:

"00:16:3e:06:56:0c"替换成你自己ip a s中"00:16:3e:06:56:0c"的值。

[root@localhost network-scripts]# cd /etc/udev/rules.d [root@localhost rules.d]# vi 75-network.rules SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:16:3e:06:56:0c", NAME="eth0"

其中ATTR后面的值为ens6网卡对应的MAC地址,NAME后面的值为要修改后的网卡名称。

  1. 配置镜像生成实例采用eth0

编辑 grub 配置文件

# 为GRUB_CMDLINE_LINUX变量增加2个参数,具体内容如下: # net.ifnames=0 biosdevname=0 [root@localhost rules.d]# vi /etc/sysconfig/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashkernel=1024M,high audit=0 net.ifnames=0 biosdevname=0" GRUB_DISABLE_RECOVERY="true"

重新生成 grub 配置文件

# UEFI启动模式 sudo grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg # BIOS(Legacy)启动模式(我这里是BIOS) sudo grub2-mkconfig -o /boot/grub2/grub.cfg

重启连接查看网卡

[root@localhost ~]# ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:06:56:0c brd ff:ff:ff:ff:ff:ff inet 172.24.183.83/20 brd 172.24.191.255 scope global dynamic noprefixroute eth0 valid_lft 315359940sec preferred_lft 315359940sec inet6 fe80::3c81:7247:acac:79dc/64 scope link noprefixroute valid_lft forever preferred_lft forever

4.2. 安装cloud-init

参考:

阿里云文档-制作Linux镜像文件

阿里云文档-安装cloud-init

  1. 确保源服务器已安装Python PIP依赖库。

以安装Python3-pip依赖库为例,Linux部分发行版的安装命令如下。

CentOS/Red Hat Enterprise Linux Ubuntu/DebianOpenSUSE/SUSE

yum和wget前先确保该服务器已经开通公网

sudo yum -y install python3-pip

  1. 运行以下命令下载阿里云版cloud-init。

wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz

  1. 运行以下命令解压cloud-init安装包到当前目录。

tar -zxvf cloud-init-19.1.21.tgz

  1. 进入cloud-init目录下,并安装依赖库。

cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt

这里可能会报错,就是下的太慢了,timeout了,重新在下一下就好了pip3 install -r ./requirements.txt

  1. 进入cloud-init的tools目录。

cd ./tools

  1. 运行以下命令执行安装cloud-init的脚本deploy.sh。

说明: 麒麟v10版本是基于CentOS8基础上构建,并且官方无麒麟版本安装,所以指定centos 8进行安装 # sudo bash ./deploy.sh <issue> <major_version> bash ./deploy.sh centos 8

确认cloud-init是否安装成功。

若返回"description": "success" ,表示安装成功。

4.3. 安装virtio驱动

为避免部分服务器、虚拟机或者云主机的操作系统在导入自定义镜像后,创建的ECS实例无法启动,您需要在导入镜像前检查是否需要在源服务器中安装virtio驱动。

检查服务器内核是否支持virtio驱动

运行以下命令,检查当前操作系统内核是否支持virtio驱动,以判断是否需要为自定义镜像安装virtio驱动或将virtio驱动添加到临时文件系统。

grep -i virtio /boot/config-$(uname -r)

image1864×847 185 KB

根据回显信息判断:

根据输出信息中的参数CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET 的取值判断:

  • 取值均为 y :已正确安装virtio驱动,可直接执行相关文档。
  • 没有这两个参数 :未安装virtio驱动,需要手动安装。具体操作,请参见安装virtio驱动。

取值均为 m /取值一个为y一个为m :支持virtio驱动,还需运行以下命令,判断virtio驱动是否已添加到临时文件系统。

  • 取值均为 m :运行以下命令,判断virtio驱动是否已添加到临时文件系统。

  • 取值一个为y一个为m :为y的驱动已经编译到内核中且正确安装,还需运行以下命令,判断为m的virtio驱动是否已添加到临时文件系统。

  • CentOS系列 Ubuntu/Debian系列

lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

image1920×160 119 KB

  • 如上图所示,表示virtio驱动已经添加到临时文件系统中,可直接执行相关文档。
  • 否则,需将virtio驱动添加到临时文件系统。如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET 参数的取值一个为y一个为m ,则只需要判断取值为m 的驱动是否已添加到临时文件系统。

参考文档:

阿里云文档-如何为已有自定义镜像安装NVMe驱动?

安装NVMe驱动

a. 运行以下命令,查看系统内核是否已经加载了NVMe驱动。

cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"

image1920×760 167 KB

已经加载

b. 运行以下命令,查看initramfs中是否包含NVMe驱动。

sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

image2836×336 138 KB

不包含

c. 依次运行以下命令,使initramfs支持NVMe驱动。

mkdir -p /etc/dracut.conf.d echo 'add_drivers+=" nvme nvme-core "' | sudo tee /etc/dracut.conf.d/nvme.conf > /dev/null sudo dracut -v -f

d. 在GRUB中添加NVMe相关的io_timeout 参数。

按i键进入编辑模式,在GRUB_CMDLINE_LINUX= 一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 参数信息。

sudo vi /etc/default/grub

[root@iZuf6hwfrhipchovcflmzwZ ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashkernel=1024M,high audit=0 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295" GRUB_DISABLE_RECOVERY="true"

e. 运行以下命令,使配置的GRUB生效。

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

f. 重新运行以下命令,查看是否有NVMe相关的返回信息。

sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

image1920×254 150 KB

好了

4.4. 安装growpart包

安装growpart包使镜像支持在线扩容文件系统,安装后在初始化时会将根分区及文件系统扩容,扩容至实际的系统盘大小。更多信息请参见扩容分区和文件系统(Linux) 。

yum -y install cloud-utils-growpart.x86_64

4.5. 安装云助手客户端

参考:阿里云文档-在ECS实例中安装云助手Agent

云助手是专为云服务器ECS打造的原生自动化运维工具,阿里云建议您为镜像安装云助手服务,实现云上ECS高效运维

sudo wget "https://aliyun-client-assist.oss-accelerate.aliyuncs.com/linux/aliyun_assist_latest.rpm" sudo rpm -ivh --force aliyun_assist_latest.rpm

4.6. 安装云安全中心Agent

参考文档:阿里云文档-安装云安全中心客户端

安装云安全中心的Agent插件后,您的服务器才能受到云安全中心的保护。

  1. 操作步骤
  • 登录云安全中心控制台。在左侧导航栏,选择系统配置 > 功能设置。
  • 在客户端页签的未安装客户端子页签下的待安装Agent的服务器列表,单击要安装Agent的服务器操作列的安装客户端,为该服务器安装Agent。
  • 您也可以选中多台服务器,单击左下角 一键安装,批量安装Agent。
  • Agent插件安装完成约5分钟后,您即可在 资产中心 > 主机资产页面的服务器页签下,查看服务器的 客户端在线情况。已安装Agent的服务器 客户端列的 客户端离线图标会变为 客户端在线图标,表示该服务器已受到云安全中心的安全防护。

image1920×985 167 KB

  1. 操作命令(我在控制台装的,就没用下面的命令了)

wget "https://update2.aegis.aliyun.com/download/install/2.0/linux/AliAqsInstall.sh" && chmod +x AliAqsInstall.sh && ./AliAqsInstall.sh -k=bE**** -r

4.7. 系统配置

参考文档:

阿里云文档-阿里云镜像规范(Linux)

  • 配置时钟

timedatectl status timedatectl set-local-rtc 0

  • 配置SSHD服务

在制作镜像过程中,需要配置SSHD服务。

SSHD服务是Linux系统中的一个服务,用于远程登录和管理Linux系统。SSHD服务通常使用SSH协议(Secure Shell)进行加密通信,以保证远程登录的安全性。修改/etc/ssh/sshd_config 中的配置示例如下:

UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yes

  • 配置Chrony/NTP服务

在制作镜像过程中,建议您配置Chrony服务或者NTP服务,配置其中一个服务即可。

Chrony和NTP都是用于同步计算机时钟的网络协议,可以确保时钟同步,以避免时间误差导致的问题。示例命令如下:

chrony_file=/etc/chrony.conf cat >$chrony_file <<EOF # Use Alibaba NTP server # Public NTP # Alicloud NTP server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst # Ignore stratum in source selection. stratumweight 0.05 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. #allow 192.168/16 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # Disable logging of client accesses. noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. logchange 0.5 logdir /var/log/chrony #log measurements statistics tracking EOF

  • 配置MOTD服务

在制作镜像过程中,建议您配置MOTD(Message of the Day)服务。

MOTD服务是Linux系统中的一项功能,它可以在用户登录到系统后显示一条欢迎信息或者系统公告。示例命令如下:

echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motd

  • 关闭Firewalld服务

在制作镜像过程中,建议您关闭Firewalld服务。Firewalld是一种在Linux系统中管理防火墙规则的服务,云上有安全组做安全防护,您可以关闭防火墙。示例命令如下:

systemctl disable firewalld --now

  • 配置PIP源

如果系统存在PIP源配置,推荐使用阿里云的PIP源地址,以便从阿里云的源中获取到最新的软件包。配置~/.pip/pip.conf 文件的内容如下:

[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com

  • 配置sysctl

在制作镜像过程中,建议您配置sysctl参数,便于调整和优化Linux内核的运行参数。

修改/etc/sysctl.conf 内容如下。

阿里云建议配置

vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0

实际配置

[root@localhost ~]# cat /etc/sysctl.conf # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). # kernel.sysrq=0 net.ipv4.ip_forward=0 net.ipv4.conf.all.send_redirects=0 net.ipv4.conf.default.send_redirects=0 net.ipv4.conf.all.accept_source_route=0 net.ipv4.conf.default.accept_source_route=0 net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.default.accept_redirects=0 net.ipv4.conf.all.secure_redirects=0 net.ipv4.conf.default.secure_redirects=0 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_responses=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.conf.default.rp_filter=1 net.ipv4.tcp_syncookies=1 kernel.dmesg_restrict=1 net.ipv6.conf.all.accept_redirects=0 net.ipv6.conf.default.accept_redirects=0 # modified kernel.sysrq=1 # newconfig vm.swappiness=0

内核参数相关解释

sysctl -p 命令使内核参数修改生效。

  • 关闭selinux

setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

  • 关闭系统限制

vi /etc/security/limits.conf * soft nofile 1048576 * hard nofile 1048576 * soft nproc 100000 * hard nproc 100000 * soft core unlimited

修改前

[root@localhost ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7422 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 7422 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

修改后

[root@iZuf6hwfrhipchovcflmzwZ ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7422 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1048576 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 100000 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

  • 修改密码安全策略

[root@localhost ~]# cd /etc/security [root@localhost security]# cp pwquality.conf pwquality.conf.bak # 原有配置 [root@localhost security]# grep -v "#" pwquality.conf minlen = 8 dcredit = 0 ucredit = 0 lcredit = 0 ocredit = 0 minclass = 3 palindrome # 修改后配置 [root@localhost security]# grep -v "#" pwquality.conf minlen = 6 # 将密码的最小长度设置为 6 个字符 dcredit = 0 # 不强制要求数字 ucredit = 0 # 不强制要求大写字母 lcredit = 0 # 不强制要求小写字母 ocredit = 0 # 不强制要求特殊字符 minclass = 0 # 不强制要求不同类型的字符 usercheck = 0 # 不检查密码中是否含有用户名 palindrome # 禁止使用回文密码

  • 清空历史命令

history -c

5. 最终镜像

最后将该实例关机,创建成新的镜像,上传oss方便下载或其他环境使用

6. 参考文档

  1. 创建虚拟机并安装Linux操作系统

安装麒麟Kylin-v10 Arm64版本到阿里云

qemu虚拟机 安装银河麒麟V10 arm架构系统 桌面版

win10安装,qemu虚拟机,搭建麒麟操作系统开发环境

阿里云-创建虚拟机并安装Linux操作系统

  1. 自定义镜像-阿里云规范

阿里云文档-阿里云镜像规范(Linux)

VirtualBox 制作自定义的阿里云镜像方法

阿里云-安装cloud-init

阿里云-安装virtio驱动

  1. 工具

Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

阿里云-安装ossutil

网友解答:
--【壹】--:

在2027前赶紧学习了,不然到时找不到应对


--【贰】--:

这篇文章可能大部分读者都用不上,也不会去关心作者写了什么。但我相信有一天,一个像两年前的我那样到处找资料完成"云平台自制镜像"任务的朋友会惊喜的在本站发现这么一篇文章。


--【叁】--:

插个眼,业务相关经常装/重装各种国产类unix系统。我在想可不可以上层统一管理一下,一次直接搞一批机器。