Cobbler 3.3.4 Docker 部署
一、背景介绍
Cobbler 是一个 Linux 安装服务器,可以快速设置网络安装环境。Ubuntu 22.04 可以使用新版的 Cobbler 3.3.4 来安装了!
二、生成安装包
1. 拉取git项目,并生成rpm或其他的安装包,此处生成的rpm包,然后将 rpm 安装在 rockylinux/rockylinux:8 docker 中。
2. 项目地址: https://github.com/cobbler/cobbler, 版本: https://github.com/cobbler/cobbler/releases/tag/v3.3.4
3. 生成安装包
1 2 3 4 5 6 7 8 9 | wget https: //github .com /cobbler/cobbler/archive/refs/tags/v3 .3.4. tar .gz tar xf v3.3.4. tar .gz cd cobbler-3.3.4 bash docker /rpms/build-and-install-rpms .sh 3.3.4 docker /rpms/Rocky_Linux_8/Rocky_Linux_8 .dockerfile # 在 rpm-build 目录下会生成 rpm 包 root@172-19-13-222:~ /cobbler-3 .3.4 /rpm-build # ls BUILDROOT cobbler-3.3.4-1.el8.noarch.rpm cobbler-3.3.4. tar .gz cobbler-tests-containers-3.3.4-1.el8.noarch.rpm cobbler-3.3.4 cobbler-3.3.4-1.el8.src.rpm cobbler-tests-3.3.4-1.el8.noarch.rpm # 最后会使用 cobbler-3.3.4-1.el8.noarch.rpm |
三、Cobbler 集成安装
1. Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | FROM rockylinux /rockylinux :8 ENV COBBLER_RPM cobbler-3.3.4-1.el8.noarch.rpm ENV DATA_VOLUMES "/var/lib/cobbler /var/www/cobbler /var/lib/dhcpd" RUN ( cd /lib/systemd/system/sysinit .target.wants/; \ for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done ); \ rm -f /lib/systemd/system/multi-user .target.wants/*;\ rm -f /etc/systemd/system/ *.wants/*;\ rm -f /lib/systemd/system/local-fs .target.wants/*; \ rm -f /lib/systemd/system/sockets .target.wants/*udev*; \ rm -f /lib/systemd/system/sockets .target.wants/*initctl*; \ rm -f /lib/systemd/system/basic .target.wants/*;\ rm -f /lib/systemd/system/anaconda .target.wants/*; VOLUME [ "/sys/fs/cgroup" ] COPY $COBBLER_RPM /$COBBLER_RPM RUN set -ex \ && dnf install -y epel-release \ && dnf install -y /$COBBLER_RPM \ && dnf install -y dhcp-server pykickstart yum-utils debmirror git rsync -daemon wget xinetd net-tools \ ipxe-bootimgs shim grub2-efi-x64-modules \ # Fix the permission of shim-x64 && chmod a+r -R /boot/efi/EFI \ && dnf clean all \ # fix debian repo support && sed -i "s/^@dists=/# @dists=/g" /etc/debmirror .conf \ && sed -i "s/^@arches=/# @arches=/g" /etc/debmirror .conf RUN echo 'ServerName localhost:80' >> /etc/httpd/conf/httpd .conf \ && rm -rf /run/httpd && mkdir -p /run/httpd # use xinetd to set tftp COPY tftp /etc/xinetd .d /tftp COPY dhcpd.conf /etc/dhcp/dhcpd .conf # systemctl3.py 用来解决systemctl 启动失败的问题 RUN wget https: //raw .githubusercontent.com /gdraheim/docker-systemctl-replacement/master/files/docker/systemctl3 .py -O /usr/local/bin/systemctl \<br> && chmod +x /usr/local/bin/systemctlRUN systemctl enable cobblerd httpd dhcpd rsyncd xinetd <br> # DHCP Server <br>EXPOSE 67 <br># TFTP <br>EXPOSE 69 <br># Rsync <br>EXPOSE 873 <br># Web <br>EXPOSE 80 <br># Cobbler <br>EXPOSE 25151 <br>VOLUME ["/var/lib/cobbler", "/var/www/cobbler", "/var/lib/dhcpd"] <br>COPY entrypoint.sh /entrypoint.sh CMD ["/entrypoint.sh"] |
2. dhcpd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # ****************************************************************** # Cobbler managed dhcpd.conf file # generated from cobbler dhcp.conf template (Mon Nov 6 06:06:34 2023) # Do NOT make changes to /etc/dhcpd.conf. Instead, make your changes # in /etc/cobbler/dhcp.template, as /etc/dhcpd.conf will be # overwritten. # ****************************************************************** ddns-update-style interim; allow booting; allow bootp; ignore client-updates; set vendorclass = option vendor-class-identifier; option pxe-system- type code 93 = unsigned integer 16; subnet 172.19.3.0 netmask 255.255.255.0 { option routers 172.19.3.254; option domain-name-servers 8.8.8.8; option subnet-mask 255.255.255.0; range dynamic-bootp 172.19.3.220 172.19.3.235; default-lease- time 21600; max-lease- time 43200; next-server 127.0.0.1; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient" ; if option pxe-system- type = 00:02 { filename "ia64/elilo.efi" ; } else if option pxe-system- type = 00:06 { filename "grub/grub-x86.efi" ; } else if option pxe-system- type = 00:07 { filename "grub/grub-x86_64.efi" ; } else { filename "pxelinux.0" ; } } } # group for Cobbler DHCP tag: default group { } |
3. entrypoint.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #!/bin/bash set -e # # Init configuration # SERVER= "${SERVER:-${SERVER_IP_V4}}" if [ -z "$SERVER" ]; then echo "env 'SERVER' is required." exit 1 fi if [ -z "$SERVER_IP_V4" ] && [ -z "$SERVER_IP_V6" ]; then echo "env ['SERVER_IP_V4', 'SERVER_IP_V6'] require at least one." exit 1 fi if [ -z "$ROOT_PASSWORD" ]; then echo "env 'ROOT_PASSWORD' is required." exit 1 fi # set server config sed -i "s/^server: 127.0.0.1/server: $SERVER/g" /etc/cobbler/settings .yaml if [ -n "${SERVER_IP_V4}" ]; then sed -i "s/^next_server_v4: 127.0.0.1/next_server_v4: $SERVER_IP_V4/g" /etc/cobbler/settings .yaml sed -i "s/127.0.0.1/$SERVER_IP_V4/g" /etc/dhcp/dhcpd .conf fi if [ -n "${SERVER_IP_V6}" ]; then sed -i "s/^next_server_v6: ::1/next_server_v6: $SERVER_IP_V6/g" /etc/cobbler/settings .yaml fi CRYPTED_PASSWORD=$(openssl passwd -1 "$ROOT_PASSWORD" ) sed -i "s#^default_password.*#default_password_crypted: \"$CRYPTED_PASSWORD\"#g" /etc/cobbler/settings .yaml # set menu title if [ -n "${MENU_TITLE}" ]; then sed -ri "s#^MENU TITLE Cobbler.+#MENU TITLE $MENU_TITLE#g" /etc/cobbler/boot_loader_conf/pxe_menu .template sed -ri "s#^MENU TITLE Cobbler.+#MENU TITLE $MENU_TITLE#g" /etc/cobbler/iso/buildiso .template fi # # Init data volumes # for v in $DATA_VOLUMES; do # shellcheck disable=SC2086 if [ -z "$(ls -A $v)" ]; then mv ${ v }.save/* $ v fi done # # Boot cobbler # systemctl start cobblerd httpd dhcpd rsyncd xinetd ( sleep 6 cobbler sync tail -n +1 -f /var/log/cobbler/cobbler .log ) & exec /usr/sbin/init |
4. tftp 使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in .tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } |
四、Cobbler docker build
1 | docker build -t test /cobbler :3.3.4 . |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!