===== Requirements ===== ** HW**: 2 nic device **OS**: Ubuntu server 17.10 apt install bash debootstrap schroot syslinux nfs-kernel-server tftpd-hpa xorriso pigz zfsutils-linux **Optional config** apt install isc-dhcp-server **network config ** nano /etc/netplan/01-netcfg.yaml # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: ens3: dhcp4: no addresses: [10.1.22.2/24] gateway4: 192.168.122.1 nameservers: addresses: [8.8.8.8,8.8.4.4] ens4: dhcp4: yes netplan apply ===== Build livenet environment ===== ==== Preparazione dell'ambiente zfs ==== zpool create livenet /dev/sdb zfs create livenet/images zfs create livenet/boot Download package git clone https://github.com/scipioni/livenet-server.git edit /etc/default/livenet like this # folder that contains livenet system BASE=/livenet IMAGES=${BASE}/images BOOT=${BASE}/boot ==== Trivial FTP ==== edit /etc/default/tftp-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/zfsp_livenet/boot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" mkdir /livenet/boot/pxelinux.cfg cp -a /usr/lib/syslinux/* /livenet/boot cp /livenet/boot/modules/efi64/* /livenet/boot edit /livenet/boot/pxelinux.cfg/default default menu.c32 prompt 0 #timeout 100 menu title PXE Special Boot Menu MENU AUTOBOOT Starting Livenet in # seconds label bootlocal menu label ^Boot local disk menu default localboot 0 label nfs menu label Ubuntu 18.04 - diskless kernel /bionic/kernel append initrd=/bionic/initrd ro livenet_root=10.1.22.2:/zfsp_livenet/images/bionic livenet_profile=default label nfs menu label Ubuntu 14.04 - install kernel /trusty/kernel append initrd=/trusty/initrd ro livenet_root=10.0.254.240:/images/trusty livenet_profile=default livenet_action=install livenet_action_end=reboot ===== BUILD IMAGE CLIENT ==== zfs create livenet/images/bionic debootstrap --arch amd64 bionic /zfsp_livenet/images/bionic/ http://archive.ubuntu.com/ubuntu cd /livenet/images run .... R=bionic cat > ${R}/etc/hosts < ${R}/etc/debian_chroot chroot bionic/ chroot ${R} apt-get -y -q install locales dialog chroot ${R} locale-gen en_GB.UTF-8 chroot ${R} locale-gen it_IT.UTF-8 chroot ${R} update-locale LANG=it_IT.UTF-8 LANGUAGE=it:en_US:en echo Europe/Rome > ${R}/etc/timezone cp ${R}/usr/share/zoneinfo/Europe/Rome ${R}/etc/localtime cat > ${R}/usr/sbin/policy-rc.d < mount --bind /zfsp_livenet/images/bionic/boot/ /zfsp_livenet/boot/bionic DISTR=bionic cat > /etc/apt/sources.list < apt update apt -y upgrade apt -y install initramfs-tools python-passlib pv screen byobu lsof pigz rsync nfs-common libpam-script xloadimage conntrack ==== install livenet client package ==== # copiare /home/scipio/.netrv e /home/scipio/.gitconfig in /root/ cd /root git clone https://github.com/scipioni/livenet-client.git cd livenet-client git checkout bionic mv .git / git status find / -maxdepth 1 > .gitignore inside git directory rsync -avb etc/ /etc/ rsync -avb usr/ /usr/ rsync -avb debian / rsync -avb README.md / apt-get -y install linux-generic ==== etc/initramfs-tools/hooks/livenet ==== #!/bin/sh -e # initramfs hook for livenet #set -x PREREQ="" # Output pre-requisites prereqs() { echo "$PREREQ" } case "$1" in prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions rm ${DESTDIR}/bin/cpio # importante! altrimenti rimane un cpio troppo semplificato copy_exec /bin/cpio /bin mkdir -p ${DESTDIR}/conf cp /etc/livenet/livenet.conf ${DESTDIR}/conf [ -f /etc/livenet/livenet.conf.override ] && cp /etc/livenet/livenet.conf.override ${DESTDIR}/conf cp /etc/initramfs-tools/scripts/functions-livenet ${DESTDIR}/conf manual_add_modules aufs manual_add_modules overlayfs auto_add_modules net auto_add_modules nfsv4 # pulizia di firmware non necessario e pesante set +e rm -f ${DESTDIR}/lib/firmware/* >/dev/null 2>&1 set -e ### qui sotto andrebbe commentato in produzione ### # tastiera italiana in initram # attivata da do_debug_shell (loadkeys /etc/boottime.kmap.gz) #cp -au /etc/console-setup/cached.kmap.gz ${DESTDIR}/etc/boottime.kmap.gz # nfs4 #copy_exec /usr/sbin/rpc.idmapd /bin #copy_exec /sbin/mount.nfs /bin #cp -au /etc/netconfig ${DESTDIR}/etc/netconfig #cat > ${DESTDIR}/etc/passwd < ${DESTDIR}/etc/group < ===Rebuild initramfs image === ln-mng --kernel ===== DHCP ===== ==== Abilitare dhcpd su specifica scheda ==== Editare la riga in /etc/default/isc-dhcp-server INTERFACESv4="ens3" ==== Configurazione dhcpd ==== editare il file /etc/dhcp/dhcpd.conf al termine service isc-dhcp-service restart ddns-update-style none; authoritative; option domain-name "livenet"; option domain-name-servers 8.8.8.8; allow bootp; allow booting; option space PXE; # Code 1: Multicast IP address of bootfile option PXE.mtftp-ip code 1 = ip-address; # Code 2: UDP port that client should monitor for MTFTP responses option PXE.mtftp-cport code 2 = unsigned integer 16; # Code 3: UDP port that MTFTP servers are using to listen for MTFTP requests option PXE.mtftp-sport code 3 = unsigned integer 16; # Code 4: Number of secondes a client must listen for activity before trying # to start a new MTFTP transfer option PXE.mtftp-tmout code 4 = unsigned integer 8; option PXE.mtftp-delay code 5 = unsigned integer 8; # Code 5: Number of secondes a client must listen before trying to restart # a MTFTP transfer option PXE.discovery-control code 6 = unsigned integer 8; option PXE.discovery-mcast-addr code 7 = ip-address; set vendor-string = option vendor-class-identifier; class "PXE" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; option vendor-class-identifier "PXEClient"; vendor-option-space PXE; option PXE.mtftp-ip 0.0.0.0; } class "Etherboot" { match if substring(option vendor-class-identifier, 0, 9) = "Etherboot"; option vendor-class-identifier "Etherboot"; vendor-option-space PXE; option PXE.mtftp-ip 0.0.0.0; } class "LIVENET" { match if (substring(option vendor-class-identifier,0,7) = "LIVENET") or (substring(option vendor-class-identifier,0,9) = "PXEClient") or (substring(option vendor-class-identifier,0,9) = "Etherboot"); log ( info, "Packet from PXE or LIVENET client"); } shared-network "clients" { subnet 10.1.22.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option routers 10.1.22.2; #default-lease-time 28800; #max-lease-time 86400; pool { # restringe il lease solo alla classe LIVENET allow members of "LIVENET"; range 10.1.22.10 10.1.22.100; filename "/pxelinux.0"; next-server 10.1.22.2; } } }