Debian10.7 自动化安装镜像制作

简介: Debian10.7 自动化安装镜像制作

Debian10.7 自动化安装镜像制作

一、debian的自动化安装方式介绍

第一种、FAI方式自动化安装

FAI是用于Linux的无人值守大规模部署的工具

具体方法可以参考https://fai-project.org/其官方站点

640.jpg

其在线打包的功能相当方便  

https://fai-project.org/FAIme/  

640.jpg

第二种、preseed预置文件方式完成自动化安装

Debian 安装程序支持使用预先配置的文件(preseed)进行自动安装。preseed预置文件可以从网络或移动介质上加载,并自动回答安装过程中的问题

具体步骤:从原始的ISO映像中提取initrd,将预置文件preseed添加到initrd,最后再封装创建一个新可引导的自动化安装的ISO映像

640.jpg

640.jpg

Simple-CDD方式

还有一种是Simple-CDD方式 The All-In-One Solution

640.jpg

我采用的是第二种 在preseed.cfg脚本编写上踩坑无数,经过20多次的debian自动化安装镜像打包和安装验证测试, debian10.7自动化安装终于搞定了

二、Debian10.7 preseed自动化安装镜像制作步骤

具体的操作步骤如下

1、debian官网下载debian10.7的完整版镜像文件

https://cdimage.debian.org/debian-cd/current/amd64/bt-dvd/

  • 1)种子文件的方式下载更快
  • 2)只用下载第一张:DVD1

640.jpg

640.jpg

2、安装debian虚拟机

用于制作镜像 我这边安装成了图形化界面模式,当然安装命令行模式也是一样 安装过程就不详细描述了,参考之前的文章图解Debian10Linux系统的安装步骤

640.jpg

3、配置apt源,并安装镜像制作相关的软件包工具


Debian10.7的apt源配置参考之前的文章几种常用Linux系统的软件镜像源配置安装镜像制作相关的软件包工具

apt install vim lrzsz
apt install debconf-utils
apt install whois
#[whois工具包用于mkpasswd生成root密码的密文]
apt install bsdtar
apt install genisoimage


4、preseed.cfg脚本


脚本主要说明

  • 1、网卡默认静态地址192.168.100.100/24
  • 2、主机名debian,域walkingcloud.cn
  • 3、时区Asia/Shanghai
  • 4、分区为LVM方案 *# /boot 500M ext4 *# /home 20G ext4 LVM *# / 20G+ ext4 LVM
  • 5、自动安装htop net-tools vim wget  iftop  iotop这些常用工具包
  • 6、preseed/late_command安装后执行命令实现root用户可以直接SSH登录
  • 7、mkpasswd -m sha-512设置root用户密码

当然你可以根据自身需要进行定制,修改脚本

vi preseed.cfg

添加如下内容

# US locale/kbd map
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us
# automatically select network interface
d-i netcfg/choose_interface select auto
d-i netcfg/disable_dhcp boolean true
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string 192.168.100.100
d-i netcfg/get_nameservers string 223.5.5.5
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.100.254
d-i netcfg/confirm_static boolean true
# set host and domain
d-i netcfg/get_hostname string debian
d-i netcfg/get_domain string walkingcloud.cn
# disable WEP dialogue
d-i netcfg/wireless_wep string
# use http.us.debian.org as mirror with no proxy
d-i mirror/country string manual
d-i mirror/http/hostname string  mirrors.cloud.tencent.com
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string  
# don't make a regular user / set root password
d-i passwd/make-user boolean false
# mkpasswd -m sha-512 <pwd>
d-i passwd/root-password-crypted password $6$zRyZgBe.MEy$fDGbMeV/4DHSuVrCepJC6Md4adDkV9jKjAXaaEHBhx8xs/AmTcoBo80AsYC3gyuoJX/ww2zNGdi1oYQkkd9KN/
d-i passwd/root-login boolean true
d-i clock-setup/utc boolean true
d-i time/zone string Asia/Shanghai
d-i clock-setup/ntp boolean false
d-i clock-setup/ntp-server string cn.pool.ntp.org
### Partitioning
d-i preseed/early_command string anna-install fdisk-udeb 
# use lvm partitioning
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
# make lvm the max size
d-i partman-auto-lvm/guided_size string max
d-i partman-auto-lvm/new_vg_name string debian
# use the following partition scheme on /dev/sda
#d-i partman-auto/disk string /dev/sda
d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
d-i partman-auto/choose_recipe select boot-lvm
# /boot 500M ext4
# /home 20G ext4
# / 20G+ ext4
d-i partman-auto/expert_recipe string               \
    boot-lvm ::                                     \
        500 500 500 ext4                            \
            $primary{ } $bootable{ }                \
            method{ format } format{ }              \
            use_filesystem{ } filesystem{ ext4 }    \
            mountpoint{ /boot }                     \
        .                                           \
        20480 20480 20480 ext4                            \
            $lvmok{ }                               \
            lv_name{ lv_home } in_vg { debian }     \
            $primary{ }                             \
            method{ format } format{ }              \
            use_filesystem{ } filesystem{ ext4 }    \
            mountpoint{ /home }                  \
        .                                           \
        20480 20480 -1 ext4                           \
            $lvmok{ }                               \
            lv_name{ lv_root } in_vg { debian }        \
            $primary{ }                             \
            method{ format } format{ }              \
            use_filesystem{ } filesystem{ ext4 }    \
            mountpoint{ / }                         \
        .
# remove any RAID partitioning
d-i partman-md/device_remove_md boolean true
# don't confirm anything
d-i partman-basicfilesystems/no_mount_point boolean false
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman-auto/purge_lvm_from_device  boolean true
d-i partman-lvm/device_remove_lvm       boolean true
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# disable swap warning
d-i partman-basicfilesystems/no_swap boolean false
# install standard system with ssh-server
tasksel tasksel/first multiselect standard, ssh-server
# also install other package
d-i pkgsel/include string htop net-tools vim wget  iftop  iotop 
# upgrade all packages
d-i pkgsel/upgrade select full-upgrade
# disable popularity contest
popularity-contest popularity-contest/participate boolean false
# Uncomment this if you don't want to use a network mirror.
#d-i apt-setup/use_mirror boolean false
d-i apt-setup/no_mirror     boolean true
d-i apt-setup/use_mirror    boolean false
d-i apt-setup/contrib       boolean false
d-i apt-setup/non-free      boolean false
d-i apt-setup/cdrom/set-next        boolean false
d-i apt-setup/services-select       multiselect
# force grub install to /dev/sda
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
#d-i grub-installer/bootdev  string /dev/sda
d-i grub-installer/bootdev  string default
#d-i grub-installer/early_command string debconf-set grub-installer/bootdev "$(list-devices disk | head -n1)"
# don't wait for confirm, just reboot when finished
d-i finish-install/reboot_in_progress note
d-i  preseed/late_command       string \
            cp -vrf /cdrom/tools/* /target/home/ ;  \
            sed -i "s/^#PermitRootLogin.*\$/PermitRootLogin yes/g" /target/etc/ssh/sshd_config ;

其中mkpasswd -m sha-512 <pwd>用于获取root密码密文

640.jpg

5、iso制作脚本make_iso.sh


/opt/preseed_debian_iso_make目录下创建 make_iso.sh

640.jpg

640.jpg


脚本来源自github

#!/bin/bash
temp_dir="isofiles"
if [ $# -ne 2 ]; then
        echo usage $0 ISO preseed.cfg
        exit 1
fi
source_iso=$1
source_iso_name=$(basename $source_iso)
preseed=$2
[ -f "$source_iso" ] || (echo source_iso does not exist && exit 1)
[ -f "$preseed" ] || (echo preseed does not exist && exit 1)
if [ ! -d "$temp_dir" ]; then
        mkdir -p "$temp_dir"
        bsdtar -C "$temp_dir" -xf "$source_iso"
        gunzip "$temp_dir"/install.amd/initrd.gz
        echo "$preseed" | cpio -H newc -o -A -F "$temp_dir"/install.amd/initrd
        gzip "$temp_dir"/install.amd/initrd
fi
sed -i 's/^timeout.*/timeout 1/' "$temp_dir"/isolinux/isolinux.cfg
cat >"$temp_dir"/isolinux/menu.cfg <<EOF
menu hshift 4
menu width 70
menu title Debian GNU/Linux installer menu (BIOS mode)
include stdmenu.cfg
include txt.cfg
EOF
cat >"$temp_dir"/isolinux/txt.cfg <<EOF
label install
        menu label ^AutoInstall Debian10.7 DIY-OS v1(cdrom) 
        menu default
        kernel /install.amd/vmlinuz
        append vga=788 auto=true priority=critical file=/preseed.cfg initrd=/install.amd/initrd.gz --- quiet
default install
EOF
\cp -vrf packages_add/*.deb $temp_dir/tools/
\cp -vrf packages_add/*.sh  $temp_dir/tools/
md5sum `find $temp_dir -follow -type f` > "$temp_dir"/md5sum.txt
genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o "preseed-$source_iso_name" "$temp_dir"/
#rm -r "$temp_dir"

其中packages_add目录为额外的工具包或者系统优化脚本


用于自动化安装完成后,若有需要,可以手动dpkg安装这些工具包以及执行该系统优化脚本

640.jpg


7、制作镜像

sh  -x make_iso.sh /root/debian-10.7.0-amd64-DVD-1.iso preseed.cfg

sh -x可以看到脚本执行过程

640.jpg


640.jpg


8、下载ISO镜像文件并创建虚拟机测试镜像


这里用SFTP方式下载打好的镜像包 preseed-debian-10.7.0-amd64-DVD-1.iso

640.jpg

创建虚拟机测试

640.jpg


9、全程自动化安装


从光盘启动,无需手工干预

安装过程截图

640.jpg

640.jpg

640.jpg

640.jpg

640.jpg

640.jpg

640.jpg

10、安装完成后登录验证


1)分区与网络


ip addr 可以看到分区与IP与定制的preseed.cfg文件中一致


640.jpg


2)htop工具


640.jpg


3)home目录也有额外的工具包或者系统优化脚本

cd /home 
dpkg --install lrzsz_0.12.21-10_amd64.deb ncdu_1.13-1+b1_amd64.deb nmon_16i+debian-2_amd64.deb

640.jpg

640.jpg

4)Env4Buster.sh 系统优化脚本


640.jpg

640.jpg


相关文章
|
12天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
85 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
25天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
48 9
|
1月前
|
Ubuntu
ubuntu和debian 的安装包dpkg管理命令对安装包进行安装,查询,卸载
Ubuntu dpkg 软件包管理命令概览:安装、卸载、查看和配置软件包。包括解决依赖、强制卸载、列出及过滤已安装包、查看包详情等操作。
55 10
|
2月前
|
Oracle Java 关系型数据库
在 Debian 12 上安装 Java 21
在 Debian 12 上安装 Java 21
|
2月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
55 0
|
3月前
|
Linux Shell 网络安全
Kickstart 自动化安装
Kickstart结合PXE技术实现Linux系统的自动化安装,适用于需批量部署一致版本的服务器场景,以减少重复劳动。通过搭建Kickstart+DHCP+NFS+TFTP+PXE架构,服务器可远程启动并下载安装配置。具体包括:配置TFTP服务以传输启动文件,设置PXE引导参数指向Kickstart脚本,利用DHCP分配IP地址。这种方式极大地提高了部署效率与一致性。
79 2
|
4月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
190 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
3月前
|
Linux
Kickstart 自动化安装
随着业务增长,服务器需求增加且需统一Linux版本以便维护。Kickstart自动化安装平台结合PXE技术,简化安装流程,显著节省时间。Intel开发的PXE技术允许工作站通过网络下载映像并启动操作系统,整个架构包括Kickstart+DHCP+NFS+TFTP+PXE。配置涉及DHCP、TFTP安装及PXE内核模块配置,最终实现远程自动化安装Linux系统。
49 3
|
4月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
233 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
4月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
41 1