Alpine自定义镜像制作

更新于 2024-05-28

1、安装alpine

可使用hyper-v或者virtualbox安装纯净alpine系统。
virtualbox安装的时候可以直接使用vhd格式的硬盘,少一步镜像格式转换的步骤。

注意:本文制作的镜像,阿里云支持BIOS和UEFI方式启动,腾讯云目前只支持BIOS,还没找到UEFI不能启动的原因。
注意:阿里云安装系统时,无法覆盖镜像默认密码(本文cloud-init为官方版本,可能是非阿里云版本原因),可以设置秘钥,使用秘钥登录;腾讯云可自由选择登录方式。

#安装alpine
#安装时保留openssh,时区、键盘设置自由选择,源可以使用15(中科大源)。
setup-alpine

2、安装cloud-init等各种工具

将下方脚本保存到文件,例如:/home/alpine-init.sh

pw_auth="false"
while [ -n "$1" ]; do
    case "$1" in
        --pwauth)
              shift
              pw_auth="true" ;;
            *)
              break ;;
    esac
done

#启用所有源,包括社区源
sed -i 's@#http://@http://@g' /etc/apk/repositories

#启用公钥登录
sed -i 's@#PermitRootLogin @PermitRootLogin @g' /etc/ssh/sshd_config && \
sed -i 's@PermitRootLogin none@PermitRootLogin prohibit-password@g' /etc/ssh/sshd_config && \
sed -i 's@PermitRootLogin yes@PermitRootLogin prohibit-password@g' /etc/ssh/sshd_config

if [ "$pw_auth" == "true" ]; then
  #启用密码登录
  sed -i 's@PermitRootLogin prohibit-password@PermitRootLogin yes@g' /etc/ssh/sshd_config
fi

service sshd restart

apk upgrade --no-cache --available && \
apk --no-cache --cache-max-age 30 add cloud-init util-linux chrony sudo tzdata openssh-server-pam && \
lsblk parted gettext e2fsprogs e2fsprogs-extra dosfstools

#启用root账户,启用密码登录(实际密码能不能登录,还是由openssh决定)
sed -i 's@disable_root: true@disable_root: false@g' /etc/cloud/cloud.cfg
sed -i 's@ssh_pwauth: false@ssh_pwauth: true@g' /etc/cloud/cloud.cfg

setup-cloud-init

#修改默认shell为/bin/bash
apk add qemu-guest-agent bash bash-completion
chsh -s /bin/bash

apk cache clean

运行脚本

chmod +x /home/alpine-init.sh

#1、不启用root密码登录
/home/alpine-init.sh 

#2、启用密码登录,根据情况选择即可
#安全起见,建议不启用,重装系统时选择使用秘钥登录
#/home/alpine-init.sh --pwauth

3、设置cloud-init

大部分设置在第2步完成了,可选设置默认用户,我这里启用root用户。

vi /etc/cloud/cloud.cfg

拉到最后,default_user节点就保留两个配置,用户名改成root,lock_passwd改成false。

default_user:
    name: root
    lock_passwd: false

保存并退出vi。

4、最后

到这里镜像就制作完成了,可以做一些清理工作:rm -rf /root/.ash_history,关机前清理下历史命令记录,然后直接poweroff关机。
关机后不要再开机。
将镜像文件转为云商支持的格式,前往云商导入镜像即可(腾讯云需要使用“强制导入”)。
hyper-x支持vhdx转为vhd,其他格式可以用qemu-img命令转换。