diff --git a/cobbler-wrapper.sh b/cobbler-wrapper.sh old mode 100755 new mode 100644 diff --git a/cobbler/Dockerfile b/cobbler/Dockerfile index 7320497..9a4c2fb 100644 --- a/cobbler/Dockerfile +++ b/cobbler/Dockerfile @@ -1,41 +1,87 @@ FROM ubuntu:bionic ARG COBBLER_GIT_URL="https://github.com/cobbler/cobbler.git" -ARG COBBLER_GIT_TAG="v3.0.0" -ARG COBBLER_SECRET_KEY="!jd!o9tq7k+@-f-4+r#uqa9b9y(yo%2^ch2iq!pdgmo^$i360j" +ARG COBBLER_GIT_TAG="v3.1.2" ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && \ - apt-get install -y fence-agents ipxe ipmitool \ - python3-pip \ - apache2 \ - apache2-dev \ - libsasl2-dev \ - libapache2-mod-wsgi-py3 \ - make \ - isc-dhcp-server \ - atftpd \ - git \ - lsb-release \ - net-tools \ - curl \ - supervisor \ - vim \ - rsyslog \ - grub-efi-amd64-signed \ - rsync && \ - ln -sf /proc/self/fd/1 /var/log/apache2/access.log && \ - ln -sf /proc/self/fd/1 /var/log/apache2/error.log && \ - pip3 install j2cli + apt-get install -qqy gnupg curl && \ + /bin/sh -c "echo 'deb http://download.opensuse.org/repositories/Debian:/debbuild/Debian_10/ /' > /etc/apt/sources.list.d/debbuild.list" && \ + curl -sL http://download.opensuse.org/repositories/Debian:/debbuild/Debian_10/Release.key | apt-key add - && \ + apt-get update -qq && \ + apt-get install -qqy \ + debbuild \ + debbuild-macros \ + wget \ + pycodestyle \ + pyflakes3 \ + python-django-common \ + python3-coverage \ + python3-distro \ + python3-distutils \ + python3-django \ + python3-dnspython \ + python3-dns \ + python3-dnsq \ + python3-future \ + python3-ldap3 \ + python3-netaddr \ + python3-pip \ + python3-pycodestyle \ + python3-pytest \ + python3-setuptools \ + python3-simplejson \ + python3-sphinx \ + python3-tornado \ + python3-tz \ + python3-yaml \ + python3-pip \ + liblocale-gettext-perl \ + lsb-release \ + xz-utils \ + bzip2 \ + dpkg-dev \ + tftpd-hpa \ + #createrepo \ + rsync \ + xorriso\ + fakeroot \ + patch \ + pax \ + git \ + hardlink \ + apache2 \ + libapache2-mod-wsgi-py3 \ + apache2-dev \ + libsasl2-dev \ + make \ + isc-dhcp-server \ + net-tools \ + supervisor \ + vim \ + rsyslog \ + grub-efi-amd64-signed \ + fence-agents \ + ipxe \ + ipmitool \ + lsof \ + wget \ + systemd && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ + ln -sf /proc/self/fd/1 /var/log/apache2/access.log && \ + ln -sf /proc/self/fd/1 /var/log/apache2/error.log - -RUN git clone --branch $COBBLER_GIT_TAG $COBBLER_GIT_URL && cd cobbler && \ - pip3 install -r requirements.txt &&\ +RUN git clone --branch $COBBLER_GIT_TAG $COBBLER_GIT_URL --depth 1 && cd cobbler && \ + # Ubuntu 18.04's apt package python3-cheetah fails to install: + pip3 install cheetah3 j2cli && \ + mkdir -p /etc/cobbler/power/ && \ make && \ make install && \ - ln -s /srv/tftpboot /var/lib/tftpboot && \ - echo "SECRET_KEY='$COBBLER_SECRET_KEY'" >> /usr/local/lib/python3.6/dist-packages/cobbler/web/settings.py && \ + ln -s /srv/tftp /var/lib/tftpboot && \ + ln -s /usr/local/share/cobbler /usr/share/ && \ + export COBBLER_SECRET_KEY=$(head /dev/urandom | tr -dc 'A-Za-z0-9!"#$%()*+,-./:;<=>?@[\]^_`{|}~' | head -c 57 ; echo '') && \ + echo "SECRET_KEY='$COBBLER_SECRET_KEY'" >> /usr/local/share/cobbler/web/settings.py && \ sed -i "s|^INTERFACESv4=.*|INTERFACESv4='eth0'|g" /etc/default/isc-dhcp-server && \ echo "lanplus=1" >> /etc/cobbler/power/fence_ipmilan.template && \ touch /var/lib/dhcp/dhcpd.leases && \ @@ -45,17 +91,13 @@ RUN git clone --branch $COBBLER_GIT_TAG $COBBLER_GIT_URL && cd cobbler && \ COPY tree/ / RUN service apache2 start && \ - mkdir /srv/tftpboot && \ + mkdir -p /srv/tftpboot && \ touch /etc/genders && \ /usr/local/bin/cobblerd && \ cobbler signature update && \ cobbler get-loaders && \ - cobbler sync && \ - ln -s /usr/local/share/cobbler /usr/share/ && \ - cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftpboot/grubx64.efi && \ - cp /usr/lib/ipxe/undionly.kpxe /srv/tftpboot/undionly.kpxe && \ - mv /var/lib/cobbler/snippets /var/lib/cobbler/autoinstall_snippets && \ - mv /var/lib/cobbler/scripts /var/lib/cobbler/autoinstall_scripts + chown -R 33:0 /var/lib/cobbler/webui_sessions && \ + ln -s /var/www/cobbler_webui_content /var/www/html/ ENV COBBLER_SERVER_HOST=127.0.0.1 \ COBBLER_NEXT_SERVER_HOST=192.168.10.91 \ @@ -73,4 +115,4 @@ EXPOSE 67/udp EXPOSE 69/udp ENTRYPOINT ["/usr/bin/supervisord"] -CMD ["-c", "/etc/supervisor/supervisord.conf"] +CMD ["-c", "/etc/supervisor/supervisord.conf"] \ No newline at end of file diff --git a/cobbler/tree/etc/apache2/conf-available/cobbler_web.conf b/cobbler/tree/etc/apache2/conf-available/cobbler_web.conf deleted file mode 100644 index 433fdcc..0000000 --- a/cobbler/tree/etc/apache2/conf-available/cobbler_web.conf +++ /dev/null @@ -1,26 +0,0 @@ -# This configuration file enables the cobbler web -# interface (django version) - - - SetEnv VIRTUALENV - Options Indexes MultiViews - AllowOverride None - Require all granted - - - - Options +Indexes +FollowSymLinks - AllowOverride None - Require all granted - - -# Use separate process group for wsgi -WSGISocketPrefix /var/run/wsgi -WSGIScriptAlias /cobbler_web /usr/local/share/cobbler/web/cobbler.wsgi -WSGIDaemonProcess cobbler_web display-name=%{GROUP} -WSGIProcessGroup cobbler_web -WSGIPassAuthorization On - - - Require all granted - \ No newline at end of file diff --git a/cobbler/tree/etc/supervisor/supervisord.conf b/cobbler/tree/etc/supervisor/supervisord.conf index 86f7b06..2943576 100644 --- a/cobbler/tree/etc/supervisor/supervisord.conf +++ b/cobbler/tree/etc/supervisor/supervisord.conf @@ -69,7 +69,7 @@ stdout_logfile_maxbytes=0 autorestart=true [program:atftpd] -command=/usr/sbin/atftpd --daemon --tftpd-timeout 300 --retry-timeout 5 --no-multicast --no-fork --verbose=5 /srv/tftpboot/ --no-source-port-checking --logfile - +command=/usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /srv/tftpboot/ priority=7 redirect_stderr=true stdout_logfile=/dev/fd/1 diff --git a/cobbler/tree/usr/local/bin/update-config.sh b/cobbler/tree/usr/local/bin/update-config.sh index 74dd34b..c568adc 100644 --- a/cobbler/tree/usr/local/bin/update-config.sh +++ b/cobbler/tree/usr/local/bin/update-config.sh @@ -1,7 +1,48 @@ #!/bin/bash echo "Updating configuration files from environment variables" +mkdir -p /data/var/lib +mkdir -p /data/etc/cobbler +mkdir -p /data/srv +mkdir -p /data/iso j2 --undefined /etc/cobbler/settings.j2 -o /etc/cobbler/settings j2 --undefined /etc/cobbler/dhcp.template.j2 -o /etc/cobbler/dhcp.template -j2 --undefined /etc/apache2/conf-available/cobbler_web.conf.j2 -o /etc/apache2/conf-available/cobbler_web.conf j2 --undefined /var/lib/cobbler/snippets/preseed_bionic_post_deploy.j2 -o /var/lib/cobbler/snippets/preseed_bionic_post_deploy j2 --undefined /var/lib/cobbler/snippets/preseed_xenial_post_deploy.j2 -o /var/lib/cobbler/snippets/preseed_xenial_post_deploy +if [[ -L /var/www ]]; then + echo "is a symlink"; else + cp --recursive --no-clobber -d /var/www /data/srv/ + rm -rf --verbose /var/www + ln --symbolic --verbose /data/srv/www /var/www +fi +if [[ -L /etc/cobbler ]]; then + echo "is a symlink"; else + cp --recursive --no-clobber -d /etc/cobbler /data/etc/ + rm -rf --verbose /etc/cobbler + ln --symbolic --verbose /data/etc/cobbler /etc/cobbler +fi +if [[ -L /var/lib/cobbler ]]; then + echo "is a symlink"; else + cp --recursive --no-clobber -d /var/lib/cobbler /data/var/lib/ + rm -rf --verbose /var/lib/cobbler/ + ln --symbolic --verbose /data/var/lib/cobbler /var/lib/cobbler +fi +if [[ -L /var/lib/dhcp ]]; then + echo "is a symlink"; else + cp --recursive --no-clobber -d /var/lib/dhcp /data/var/lib/ + rm -rf --verbose /var/lib/dhcp + ln --symbolic --verbose /data/var/lib/dhcp /var/lib/dhcp +fi +chown -R 33:0 /data/var/lib/cobbler/webui_sessions +chown -R 33:0 /data/var/lib/cobbler/web.ss +if [[ -L /srv ]]; then + echo "is a symlink"; else + cp --recursive --no-clobber -d /srv /data/ + rm -rf --verbose /srv + ln --symbolic --verbose /data/srv /srv +fi +unlink /var/lib/tftpboot/tftp +ln --symbolic --verbose /srv/tftpboot /var/lib/tftpboot/tftp +mkdir -p /data/srv/www/cobbler/links +sleep 30 +pkill -f tftpd +supervisorctl start atftpd diff --git a/cobbler/tree/var/lib/cobbler/triggers/sync/post/restart-dhcp.sh b/cobbler/tree/var/lib/cobbler/triggers/sync/post/restart-dhcp.sh old mode 100755 new mode 100644 diff --git a/download-iso-and-mount.sh b/download-iso-and-mount.sh old mode 100755 new mode 100644 index 4eca8fb..2d3e9f3 --- a/download-iso-and-mount.sh +++ b/download-iso-and-mount.sh @@ -1,14 +1,9 @@ #!/bin/bash -URL_BIONIC="http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04.3-server-amd64.iso" -FILENAME_BIONIC=$(basename $URL_BIONIC) -echo "Downloading $FILENAME_BIONIC" -test -f ~/$FILENAME_BIONIC || curl $URL_BIONIC -o ~/$FILENAME_BIONIC -test -d /mnt/bionic || sudo mkdir /mnt/bionic -sudo mount -o loop ~/$FILENAME_BIONIC /mnt/bionic - -URL_XENIAL="http://releases.ubuntu.com/16.04/ubuntu-16.04.6-server-amd64.iso" -FILENAME_XENIAL=$(basename $URL_XENIAL) -echo "Downloading $FILENAME_XENIAL" -test -f ~/$FILENAME_XENIAL || curl $URL_XENIAL -o ~/$FILENAME_XENIAL -test -d /mnt/xenial ||sudo mkdir /mnt/xenial -sudo mount -o loop ~/$FILENAME_XENIAL /mnt/xenial +URL="http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04.4-server-amd64.iso" +COBBLER_SHARE_PATH="/mnt2/pool/cobbler" +DISTRO_NAME="ubuntu-18.04.4-server" +FILENAME=$(basename $URL) +echo "Downloading $FILENAME" +test -f ~/$FILENAME || curl $URL -o ~/$FILENAME +test -d ${COBBLER_SHARE_PATH}/iso/${DIR} || mkdir ${COBBLER_SHARE_PATH}/iso/${DISTRO_NAME} +mount -o loop ~/$FILENAME ${COBBLER_SHARE_PATH}/iso/${DIR} diff --git a/import-iso.sh b/import-iso.sh old mode 100755 new mode 100644 index 8a2d12f..7bf7381 --- a/import-iso.sh +++ b/import-iso.sh @@ -3,28 +3,15 @@ if [ ! -f "/usr/local/bin/cobbler" ]; then echo "\$ docker exec -it cobbler /bin/bash -c \"\$(