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:

Lästid:

5–8 minutes

Antal ord:

1,251 words