Install the required tools

sudo apt-get install squashfs-tools syslinux-utils

Download the ubuntu iso

wget http://releases.ubuntu.com/18.10/ubuntu-18.10-desktop-amd64.iso

Setup iso_file variable

export iso_file=ubuntu-18.10-desktop-amd64.iso

Extract the image and mount it

mkdir mnt
sudo mount -o loop ${iso_file} mnt/

Extract the filesystem.squashfs

mkdir extract-cd
sudo rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd
mkdir squashfs
sudo unsquashfs mnt/casper/filesystem.squashfs
sudo mv squashfs-root edit


Bind the enviroment and chroot into it

sudo mount --bind /dev/ edit/dev
sudo chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C

Edit the dns config

nano /run/systemd/resolve/stub-resolv.conf
nameserver 1.1.1.1

Install php and apache

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install php

Install finnish and spanish

apt-get remove --purge language-pack-bn language-pack-bn-base language-pack-gnome-bn language-pack-gnome-bn-base language-pack-es language-pack-es-base language-pack-gnome-es language-pack-gnome-es-base language-pack-pt language-pack-pt-base language-pack-gnome-pt language-pack-gnome-pt-base language-pack-xh language-pack-xh-base language-pack-gnome-xh language-pack-gnome-xh-base language-pack-hi language-pack-hi-base language-pack-gnome-hi language-pack-gnome-hi-base language-pack-de language-pack-de-base language-pack-fr language-pack-fr-base language-pack-gnome-de language-pack-gnome-de-base language-pack-gnome-fr language-pack-gnome-fr-base firefox-locale-bn firefox-locale-de firefox-locale-es firefox-locale-pt language-pack-gnome-zh-hans language-pack-gnome-zh-hans-base language-pack-zh-hans language-pack-zh-hans-base firefox-locale-zh-hans
sed -i 's/restricted/restricted universe/' /etc/apt/sources.list
apt update
apt install gnome-getting-started-docs-fi gnome-user-docs-fi language-pack-fi language-pack-fi-base language-pack-gnome-fi language-pack-gnome-fi-base
gnome-getting-started-docs-es gnome-user-docs-es language-pack-es language-pack-es-base language-pack-gnome-es language-pack-gnome-es-base 
apt install xul-ext-mozvoikko libreoffice-l10n-fi libreoffice-voikko firefox-locale-fi libreoffice-help-fi thunderbird-locale-fi libenchant-voikko tmispell-voikko
libreoffice-l10n-es  firefox-locale-es libreoffice-help-es thunderbird-locale-es
sed -i 's/restricted universe/restricted/' /etc/apt/sources.list
apt install libreoffice-l10n-en-gb libreoffice-help-en-gb libreoffice-l10n-en-za libreoffice-help-en-us poppler-data hyphen-fi hunspell-en-ca mythes-en-au thunderbird-locale-en-gb hyphen-en-us thunderbird-locale-en-us mythes-en-us wbritish hunspell-en-za libreoffice-l10n-en-gb hunspell-en-gb

Open a new terminal to configure ubuntu preseed

sudo su
cd extract-cd 
cd preseed
nano ubuntu.seed

Ubuntu.seed contents

# Enable extras.ubuntu.com.
d-i apt-setup/extras    boolean true
# Install the Ubuntu desktop.
tasksel tasksel/first   multiselect ubuntu-desktop
# On live DVDs, don't spend huge amounts of time removing substantial
# application packages pulled in by language packs. Given that we clearly
# have the space to include them on the DVD, they're useful and we might as
# well keep them installed.
ubiquity    ubiquity/keep-installed string icedtea6-plugin openoffice.org php

Go back to the first terminal and clean up the system

apt clean
rm -rf /tmp/*
rm -rf /var/cache/apt-xapian-index/*
rm -rf /var/lib/apt/lists/*
umount /proc
umount /sys
umount /dev/pts

Exit the enviroment

exit
sudo umount edit/dev

Create the file manifest

sudo -s
chmod +w extract-cd/casper/filesystem.manifest
chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest

Create the filesystem.squashfs

mksquashfs edit extract-cd/casper/filesystem.squashfs

Export the iso file

export output_file=ubuntu-18.04-desktop-apache-remix-amd64.iso

export IMAGE_NAME="Ubuntu 18.10"
sed -i -e "s/$IMAGE_NAME/$IMAGE_NAME (Apache Remix)/" extract-cd/README.diskdefines
sed -i -e "s/$IMAGE_NAME/$IMAGE_NAME (Apache Remix)/" extract-cd/.disk/info
cd extract-cd
rm -f md5sum.txt
(find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee ../md5sum.txt)
mv -f ../md5sum.txt ./
# If the following is not done, causes an error in the boot menu disk check option
sed -i -e '/isolinux/d' md5sum.txt
export IMAGE_NAME="Ubuntu 18.04 apache-remix amd64"
genisoimage -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -o ../${output_file} .
cd ..
isohybrid --uefi ${output_file}
umount squashfs/
umount mnt/
exit

Now you have your own customized ubuntu image with anything you want to preinstall
Here's the iso files i created for this tutorial
/files

sources

  1. https://bazaar.launchpad.net/~timo-jyrinki/ubuntu-fi-remix/main/view/head:/finnish-remix.sh

Installing salt-master on ubuntu 18.04

so install salt-master using

sudo apt install salt-master

Installing salt-minion on ubuntu 18.04

to install salt-minion run

sudo apt install salt-minion

Configuring salt minion

configure salt minion to connect to the master

sudoedit /etc/salt/minion

/etc/salt/minion

  master:192.168.8.10x
  id:your_id  

restart the minion

sudo systemctl restart salt-minion.service

accept the key from the master

 sudo salt-key -A

Now try it out

  sudo salt '*' cmd.run 'whoami'

Configuring firewall

sudoedit /srv/salt/firewall.sls

firewall.sls

sudoedit /srv/salt/firewall/user.rules

user.rules

sudoedit /srv/salt/firewall/user6.rules

user6.rules

to enable firewall on minions

sudo salt '*' state.highstate

Server info using grains

sudo salt '*' grains.items

serverinfo.txt

installing nginx with php-fpm using salt

nginx configuration

listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {

include snippets/fastcgi-php.conf;

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

salt configuration
init.sls
top.sls
index.php

<?php

phpinfo();

final result
phpinfo

references

  1. http://terokarvinen.com/2018/aikataulu-%E2%80%93-palvelinten-hallinta-ict4tn022-3004-ti-ja-3002-to-%E2%80%93-loppukevat-2018-5p
  2. https://github.com/joonaleppalahti/CCM/tree/master/salt/srv/salt
  3. https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04
  4. https://github.com/obb12/vbox-server

Download and configure linux kernel

install compilation tools on a ubuntu distro 18.04 (linux mint,xubuntu)

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install fakeroot build-essential ncurses-dev xz-utils libssl-dev bc bison flex
 sudo apt-get install kernel-package

now download linux kernel in this tutorial 4.18.16 it might not be the latest

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.18.16.tar.xz

untar the kernel

tar -xvf linux-4.18.16.tar.xz

go to the directory and copy the current config from your current kernel look carefully at what to enable in make oldconfig

 cp -v /boot/config-$(uname -r) .config
 make oldconfig

Warning do not do this if you’re not familiar with Linux. If you want to customize your kernel more you can run make menuconfig or install kernel patches (example ssd patch)

Compile the kernel you can compile using fakeroot

fakeroot make-kpkg --initrd  kernel_image kernel_headers -j 16

installing the kernel

cd ..
sudo apt install ./linux*.4.18.16*.deb

now reboot your system

  sudo reboot

sources

  1. https://www.cyberciti.biz/faq/debian-ubuntu-building-installing-a-custom-linux-kernel/