28 November 2017

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.

  1. 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
  2. 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/
  3. Chroot till vår Debian-miljö.
    sudo chroot $HOME/live_boot/chroot
    echo "debian-live" > /etc/hostname
  4. 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
  5. 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
  6. Generera en locale
    locale-gen en_US.UTF-8
  7. Ö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"
  8. Ange root-lösenordet
    passwd root
  9. Skapa ett student-konto och sätt ett lösenord
    adduser student
  10. 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
  11. Ladda in dessa regler
    iptables-restore < /etc/firewall.conf
  12. Skapa ett startskript för reglerna
    nano /etc/network/if-up.d/iptables
    
    #!/bin/sh
    iptables-restore < /etc/firewall.conf
  13. Gör skriptet körbart:
    chmod +x /etc/network/if-up.d/iptables
  14. 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
  15. 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
  16. 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 ..'
  17. Skapa kataloger att lagra konfig-filer i
    mkdir /home/student/.config
    mkdir /home/student/.config/{openbox,fbpanel}
  18. 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 &
  19. 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
      }
    }
  20. 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>
  21. Sätt rätt ägare till filerna vi skapat
    chown student.student -R /home/student/.config
  22. Exit ut ur chroot
    exit
  23. 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/
  24. Skapa kataloger som kommer att kopieras till vårt startbara medium.
    mkdir -p $HOME/live_boot/image/{live,isolinux}
  25. Komprimera chroot-miljön till ett Squash-filsystem.
    (cd $HOME/live_boot && \
       sudo mksquashfs chroot image/live/filesystem.squashfs -e boot
    )
  26. 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
    )
  27. 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
  28. 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
    )
  29. 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
  30. 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.

Postat under: Teknik

Imponerande! Du kom ända hit!

Logo
visningsbild

Christian Ohlsson

crille (at) crille (dot) org

https://crille.org

Logo Logo Logo Logo Logo Logo Logo

Crilles blog är en hemsida som drivs av mig, Christian Ohlsson. Jag bor i ett gulligt hus i Trollhättan tillsammans med fru och dotter. Dagarna spenderar jag som universitetsadjunkt på Högskolan Väst's avdelning för Medier & Design. Där håller jag kurser inom webbdesign, spelutveckling och programmering. Kvällarna tillbringar jag på de_inferno, de_train, fy_pool_day eller någon av de andra banorna i Counter Strike.

Temat på denna sida är gjort av mig med hjälp av det alldeles underbara CMS-systemet Wordpress. Naturligtvis är allt skapat på en PC med Brackets. Up the Irons!