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 .

  

  

  

  

 

 
posted @   cptao  阅读(757)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示