Skapa Debianbaserad Linuxdistribution
Så här gör du för att skapa en Linuxdist baserad på Debian. I denna guide så använder jag Ubuntu 17.10 för att skapa en Debian 9 x86-distribution som körs enbart i RAM-minne och bootas från CD eller USB. I denna guide använder jag brandväggen iptables för att skapa speciella regler så att man bara kan surfa till vissa speciella sajter. Om du vill använda denna distribution till något annat kanske du vill hoppa över steget med att skapa brandväggsregler.
Programvara som installeras är Libreoffice Writer, Firefox samt texteditorn Leafpad. Anledningen till dessa val är att syftet i mitt fall med denna distribution är att skapa ett operativsystem med webbläsaråtkomst till Högskolan Väst kursplattform samt möljligheten att kunna hantera textdokument utan att kunna komma åt något annat. Detta operativsystem används vid salstentor som utförs på en dator helt enkelt.
Stegen 4 till 21 i denna guide utförs i en chroot och de kommandon bör inte skriva i ditt körande operativsystem.
- Förbered för att skapa disten genom att köra nedanstående
sudo apt-get install \ debootstrap \ syslinux \ isolinux \ squashfs-tools \ genisoimage \ memtest86+ \ rsync
- Installera den grundläggande Debian-miljön. Jag använder Debian Stretch som bas och i386 för arkitekturen.
mkdir $HOME/live_boot sudo debootstrap \ --arch=i386 \ --variant=minbase \ stretch $HOME/live_boot/chroot \ http://ftp.se.debian.org/debian/
- Chroot till vår Debian-miljö.
sudo chroot $HOME/live_boot/chroot echo "debian-live" > /etc/hostname
- Ta reda på vilken Linux-kärna du vill ha i din distribution. Jag valde kärnan linux-image-586.
apt-get update && \ apt-get install \ --no-install-recommends \ --yes \ linux-image-586 \ live-boot \ systemd-sysv
- Installera de program du önskar, och kör sedan apt-clean för att spara lite utrymme. Jag använder -no-install-recommends för att undvika överflödiga paket. Du kan själv bestämma vad du behöver för din miljö.
apt-get install --no-install-recommends --yes \ network-manager net-tools wireless-tools \ tcpdump wget openssh-client openbox fbpanel hsetroot \ xserver-xorg-core xserver-xorg xinit xterm \ pciutils usbutils ntfs-3g dosfstools \ syslinux xdm dialog locales hunspell-sv hyphen-sv mythes-sv \ iceweasel libreoffice-writer iptables leafpad nano && \ apt-get clean
- Generera en locale
locale-gen en_US.UTF-8
- Öppna locale-filen och fyll i nedanstående
nano /etc/default/locale LANG="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8"
- Ange root-lösenordet
passwd root
- Skapa ett student-konto och sätt ett lösenord
adduser student
- Skapa brandväggsregler i en fil. Om du inte vill blockera all trafik hoppar du till steg 16.
nano /etc/firewall.conf *filter # Firewall rules mainly to just allow incoming HTTP and SSH # Also blocking all aoutgoing traffic except HTTP # # Christian Ohlsson 2017-10-29 # # Set default policies for all three default chains -P INPUT DROP -P FORWARD DROP -P OUTPUT DROP # Enable free use of loopback interfaces -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT # All TCP sessions should begin with SYN -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP # Allow outgoing http to certain sites (disco.hv.se and dependencies) -A OUTPUT -p tcp -d fonts.googleapis.com --dport 80 -j ACCEPT -A OUTPUT -p tcp -d fonts.googleapis.com --dport 443 -j ACCEPT -A OUTPUT -p tcp -d fonts.gstatic.com --dport 80 -j ACCEPT -A OUTPUT -p tcp -d fonts.gstatic.com --dport 443 -j ACCEPT -A OUTPUT -p tcp -d googleadapis.l.google.com --dport 80 -j ACCEPT -A OUTPUT -p tcp -d googleadapis.l.google.com --dport 443 -j ACCEPT -A OUTPUT -p tcp -d disco.hv.se --dport 80 -j ACCEPT -A OUTPUT -p tcp -d disco.hv.se --dport 443 -j ACCEPT -A OUTPUT -p tcp -d adfs.hv.se --dport 80 -j ACCEPT -A OUTPUT -p tcp -d adfs.hv.se --dport 443 -j ACCEPT -A OUTPUT -p tcp -d 194.71.11.0/24 --dport 80 -j ACCEPT -A OUTPUT -p tcp -d 194.71.11.0/24 --dport 443 -j ACCEPT # Accept inbound TCP packets -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Accept inbound and outbound ICMP messages -A INPUT -p ICMP --icmp-type 8 -s 0.0.0.0/0 -j ACCEPT -A INPUT -p ICMP --icmp-type 11 -s 0.0.0.0/0 -j ACCEPT -A OUTPUT -p icmp --icmp-type 8 -s 0.0.0.0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # Accept outbound packets -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT COMMIT
- Ladda in dessa regler
iptables-restore < /etc/firewall.conf
- Skapa ett startskript för reglerna
nano /etc/network/if-up.d/iptables #!/bin/sh iptables-restore < /etc/firewall.conf
- Gör skriptet körbart:
chmod +x /etc/network/if-up.d/iptables
- Skapa ett script för att nollställa alla brandväggsregler och gör det körbart
nano /root/clearFW.sh #!/bin/sh /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -t nat -F /sbin/iptables -t mangle -F /sbin/iptables -F /sbin/iptables -X chmod +x /root/clearFW.sh
- Lägg till att Googles font-servrar skall ignoreras med
nano /etc/hosts 127.0.0.1 fonts.googleapis.com 127.0.0.1 fonts.gstatic.com
- Skapa ett par alias i .bashrc för root och student
nano /root/.bashrc samt /home/student/.bashrc: alias d='ls -al --color' alias ..='cd ..'
- Skapa kataloger att lagra konfig-filer i
mkdir /home/student/.config mkdir /home/student/.config/{openbox,fbpanel}
- Fixa så att fönsterhanteraren får en bakgrundsbild och en panel. Själva bilden kopierar vi in lite senare i steg 23.
nano /home/student/.config/openbox/autostart hsetroot -cover /usr/share/pixmaps/wallpaper.jpg fbpanel &
- Fyll vår panel med info om vad som skall finnas. Jag rekomenderar att du kopierar texten så att du slipper att skriva allt.
nano /home/student/.config/fbpanel/default Global { edge = bottom allign = center margin = 0 widthtype = percent width = 100 height = 40 transparent = true tintcolor = #ffffff alpha = 80 setdocktype = true setpartialstrut = true autohide = false heightWhenHidden = 2 roundcorners = false roundcornersradius = 0 layer = none MaxElemHeight = 32 } Plugin { type = space config { size = 8 } } Plugin { type = launchbar config { button { image = /usr/share/icons/hicolor/32x32/apps/libreoffice-writer.png tooltip = Libreoffice Writer action = libreoffice -writer } } } Plugin { type = space config { size = 6 } } Plugin { type = launchbar config { button { image = /usr/share/icons/hicolor/32x32/apps/firefox-esr.png tooltip = Firefox action = firefox-esr } } } Plugin { type = space config { size = 6 } } Plugin { type = launchbar config { button { image = /usr/share/icons/hicolor/32x32/apps/leafpad.png tooltip = Leafpad Text Editor action = leafpad } } } Plugin { type = space config { size = 6 } } Plugin { type = launchbar config { button { image = /usr/share/icons/Adwaita/32x32/apps/utilities-terminal.png tooltip = Terminal action = xterm } } } Plugin { type = space config { size = 25 } } Plugin { type = taskbar expand = true config { ShowIconified = true ShowMapped = true ShowAllDesks = false tooltips = true IconsOnly = false MaxTaskWidth = 220 } }
- Skapa en meny som dyker upp när man högerklickar på skrivbordet genom att ta bort den gamla filen och skapa en ny med nedanstående innehåll. Jag rekomenderar att du kopierar texten så att du slipper att skriva allt.
rm /etc/X11/openbox/menu.xml nano /etc/X11/openbox/menu.xml <?xml version="1.0" encoding="UTF-8"?> <openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd"> <menu id="root-menu" label="Openbox 3"> <item label="Libreoffice Writer"> <action name="Execute"> <execute>libreoffice -writer</execute> </action> </item> <item label="Firefox Web Browser"> <action name="Execute"> <execute>firefox-esr</execute> </action> </item> <item label="Leafpad Text Editor"> <action name="Execute"> <execute>leafpad</execute> </action> </item> <item label="Terminal"> <action name="Execute"> <execute>xterm</execute> </action> </item> <separator /> <item label="Log Out"> <action name="Exit" /> </item> </menu> </openbox_menu>
- Sätt rätt ägare till filerna vi skapat
chown student.student -R /home/student/.config
- Exit ut ur chroot
exit
- Kopiera in skrivbordssbakgrunden att använda. Ta vilken bild du vill eller ladda hem den här. Bilden skall heta wallpaper.jpg
sudo cp Desktop/wallpaper.jpg live_boot/chroot/usr/share/pixmaps/
- Skapa kataloger som kommer att kopieras till vårt startbara medium.
mkdir -p $HOME/live_boot/image/{live,isolinux}
- Komprimera chroot-miljön till ett Squash-filsystem.
(cd $HOME/live_boot && \ sudo mksquashfs chroot image/live/filesystem.squashfs -e boot )
- Förbered vår bootloader.
(cd $HOME/live_boot && \ cp chroot/boot/vmlinuz-4.9.0-4-686 image/live/vmlinuz1 cp chroot/boot/initrd.img-4.9.0-4-686 image/live/initrd1 )
- Skapa en meny för isolinux bootloader. Skapa en textfil med detta innehåll.
nano $HOME/live_boot/image/isolinux/isolinux.cfg UI menu.c32 prompt 0 menu title Crille Tenta Live 2017 timeout 30 label Debian Tenta Live menu label ^Debian Tenta Live menu default kernel /live/vmlinuz1 append initrd=/live/initrd1 boot=live toram label hdt menu label ^Hardware Detection Tool kernel hdt.c32 text help HDT displays low-level information endtext label memtest86+ menu label ^memtest86+ kernel /live/memtest
- Kopiera filer som krävs för att ISO ska startas
(cd $HOME/live_boot/image/ && \ cp /usr/lib/ISOLINUX/isolinux.bin isolinux/ && \ cp /usr/lib/syslinux/modules/bios/menu.c32 isolinux/ && \ cp /usr/lib/syslinux/modules/bios/hdt.c32 isolinux/ && \ cp /usr/lib/syslinux/modules/bios/ldlinux.c32 isolinux/ && \ cp /usr/lib/syslinux/modules/bios/libutil.c32 isolinux/ && \ cp /usr/lib/syslinux/modules/bios/libmenu.c32 isolinux/ && \ cp /usr/lib/syslinux/modules/bios/libcom32.c32 isolinux/ && \ cp /usr/lib/syslinux/modules/bios/libgpl.c32 isolinux/ && \ cp /usr/share/misc/pci.ids isolinux/ && \ cp /boot/memtest86+.bin live/memtest )
- Skapa ISO-filen
genisoimage \ -rational-rock \ -volid "Tenta Live" \ -cache-inodes \ -joliet \ -hfs \ -full-iso9660-filenames \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -output $HOME/live_boot/tenta-live.iso \ $HOME/live_boot/image
- Done!
Nu kan du bränna filen live_boot/tenta-live.iso till en CD-skiva med ImgBurn eller använda Rufus för att lägga ditt operativsystem på en USB-sticka.
Välj sedan att starta datorn på USB. Det tar någon halvminut för OS att läsas in, men när det är klart kan du ta ur USB-stickan eftersom allt körs direkt från RAM-minne. Tänk bara på att ingen hårddisk är monterad så alla filer du sparar försvinner när datorn startas om.