HowTo: Minimal-Debian-Installation mit debootstrap + Openbox

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
TomL

HowTo: Minimal-Debian-Installation mit debootstrap + Openbox

Beitrag von TomL » 28.10.2015 12:47:04

Zielsetzung:
Einen Internet-Browser über einen ganz normalen Desktop-Starter in einem neu zu startenden minimalen Debian (ohne Desktop-Environment) innerhalb einer virtuellen Maschine ausführen, um dann mit diesem Browser mit einem unprivilegierten User in einer vom normalen Heimnetzwerk und den privaten Daten des Anwenders getrennten und somit isolierten Umgebung im Internet zu surfen. Ein paar weitere ausführlichere Ausführungen zu meiner Motivation und den Grund für dieses Vorhaben findet man in diesem Thread.

Voraussetzungen:
Da für die neue Mini-Debian-Installation ein VDI-File (Virtuelles Harddisk-Image) notwendig ist und die Installation über „debootstrap“ erfolgt, muss entweder eine schon laufende Debian-VM verfügbar sein oder es muss ein Loop-Device für VDI-Images installiert werden, um die virtuelle Harddisk regulär zu mounten. Ich ralisiere das durchzuführende Setup der neuen VM hier über eine schon vorhandene Debian-VM, die bei mir mit Jessie und Xfce als Desktop schon seit einiger Zeit läuft.

Vorbereitungen:
Meine neue Mini-Debian-Installation zum Surfen im Internet soll den Namen „Surfer“ bekommen. Dazu als erstes das VBox-Manager-GUI öffnen und eine neue VM anlegen und Name, Typ und Version der neuen VM eingeben.

Im nächsten Dialog wird der verfügbare Speicher festgelegt, in Abhängigkeit von der Größe des im Rechner installierten Speichers. Ich wähle bei mir immer 4096 MB, da ich 8 GB zur Verfügung habe und bisher keine Engpässe bemerkt habe.

Im dritten Dialog wird die Art der virtuellen Festplatte bestimmt, sowie deren Größe festgelegt. Da ich in dieser Installation wirklich nichts zusätzliches außer dem Browser und dafür notwendige Zusatzprogramme (Flash, Soundmixer) installiere, reichen bei mir 2 GB als feste (!)
Größe. Hinzu kommt, dass mich speziell bei dieser Art einer VM die Systemlogs nicht interessieren und ich das Schreiben dieser Logs deshalb kurzerhand nach tempfs gemountet habe. Das bedeutet, sie wachsen in dieser (kleinen) virtuellen Harddisk nicht immerfort, sind aber auch nur eingeschränkt bei der Fehlersuche verfügbar, da sie nach dem Schließen der VM einfach vergessen werden.

Mit diesen drei Schritten ist die neue VM erzeugt. Meistens führe ich auch sofort noch ein paar weitere Einstellungen im Vbox-Manager durch: 2 Prozessoren, 64 MB Grafikspeicher, bidirektionale Zwischenablage, keine Diskette.... aber das war es dann auch schon.

Installation:
Wie bereits erwähnt, führe ich das Setup mithilfe meiner bereits vorhandenen Xfce-VM aus. Bevor ich diese VM jedoch starte, ist vorher im VBoxManager-GUI eine kleine Einstellung notwendig, und zwar die temporäre Einbindung der gerade zuvor erstellten und der neuen VM gehörenden Surfer.vdi. Ich öffne dazu also den „Massenspeicher-Dialog“ und füge zur bestehenden xfce.vdi (bei mir heißt die so) einen neuen Sata-Controller hinzu. Dann wähle ich FileDialog-geführt die soeben erstellte Surfer.vdi aus und starte die Xfce-VM, sobald sie Harddisk hinzugefügt ist.

Nun führe ich das Setup entsprechend des folgenden „Drehbuchs“ durch.
Zuletzt geändert von TomL am 28.10.2015 12:51:39, insgesamt 1-mal geändert.

TomL

Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope

Beitrag von TomL » 28.10.2015 12:50:43

Setup Debian-Grundsystem ohne Desktop-Environment auf zweite (!) Festplatte installieren, hier: /dev/sdb

Code: Alles auswählen

blkid                                                                   // Check: Name = /dev/sdb?
df -h                                                                   // Check: Gemountet? umount! 
mkfs.ext4 /dev/sdb1                                                     // Check: Leer+ext4=ok? Probleme? Mit GParted löschen, neu anlegen 
    
[ ! -d /media/sdb ] && mkdir /media/sdb                                 // Zielverzeichnis für "neues" Debian erstellen
mount /dev/sdb1 /media/sdb -t ext4
df -h                                                                   // Check: Gemountet? 

debootstrap --arch i386 jessie /media/sdb http://ftp.de.debian.org/debian
debootstrap --arch amd64 jessie /media/sdb http://ftp.de.debian.org/debian

ls /media/sdb                                                           // Check! Sichtkontrolle
mkdir /media/sdb/proc && mkdir /media/sdb/dev && mkdir /media/sdb/sys   // Sofern nach debootstrap nicht vorhanden!

cat /proc/mounts | grep sdb                                             // Check! Sichtkontrolle
mount --bind /proc /media/sdb/proc
mount --bind /dev /media/sdb/dev
mount --bind /sys /media/sdb/sys
cat /proc/mounts | grep sdb                                             // Check! Gemountet?

chroot /media/sdb

nano /etc/apt/sources.list                                              // Append:   non-free contrib 

apt-get update
apt-get install console-data console-common locales keyboard-configuration

dpkg -l tzdata locales
apt-get install tzdata locales                                          // nur fehlende !!!

apt-get install linux-image-586 -s                                      // Check! Simulation (Info)
apt-get install linux-image-586                                         // Kernel für ältere PC (empfohlen!) 
apt-get install linux-image-586 --no-install-recommends                 // oder: ohne recommends 
apt-get install linux-image-686-pae                                     // oder: alternativ Kernel mit Physical-Adress-Extension

passwd                                                                  // root-PWD setzen. Achtung: Ggf. noch US-Tastatur y=z, z=y

cat /etc/fstab                                                          // Check! leer = ok
echo "proc /proc proc defaults 0 0" >>/etc/fstab                        // nano /etc/fstab
echo "sysfs /sys sysfs defaults 0 0" >>/etc/fstab

blkid                                                                   // Get UUID
echo "UUID=????? / ext4  errors=remount-ro 0 1" >>/etc/fstab            // replace ????? mit UUID
cat /etc/fstab                                                          // Check: Sichtkontrolle

dpkg -l grub*                                                           // Check! Installiert? Nein = ok
apt-get install grub2                                                   // führt grub-install automatisch aus, ansonsten:

grub-install /dev/sdb                                                   // manuell in chroot oder
grub-install /dev/sdb --root-directory=/media/sdb                       // nach verlassen chroot mit exit

exit                                                                    // chroot beenden

/----------------------------------------------------------------------------------------------------------------------
Vorbereitendes Customizing. Hier -vor Neustart- weil in VM keine Copy/Paste-Unterstützung u. DE-Keyboard verhanden ist 

Disable Recommends, sofern gewünscht:
    echo 'APT::Install-Recommends "0";' >/media/sdb/etc/apt/apt.conf    // Geprüft! Ist in Jessie wirksam
    echo 'APT::Install-Suggests "0";'  >>/media/sdb/etc/apt/apt.conf
    cat /etc/apt/apt.conf                                               // oder:
    
    echo 'APT::Install-Recommends "0";' >/media/sdb/etc/apt/apt.conf.d/98nosuggests  
    echo 'APT::Install-Suggests "0";'  >>/media/sdb/etc/apt/apt.conf.d/98nosuggests  
    cat /etc/apt/apt.conf.d/98nosuggests

Netzwerk:
nano /media/sdb/etc/hostname                                            // Set Hostname
    NEUER_NAME                                                          // add

nano /media/sdb/etc/hosts
    127.0.0.1       localhost.localdomain   NEUER_NAME                  // replace

nano /media/sdb/etc/network/interfaces                                  // add
    source /etc/network/interfaces.d/*

    # The loopback network interface
    auto lo
    iface lo inet loopback

    # The primary network interface
    allow-hotplug eth0
    auto eth0
    iface eth0 inet dhcp
    
shutdown -h now                                                         // Ausführende produktive VM schließen     
    
//======================================================================================================================
Neu-Installierte VM starten, System-Customizing durchführen:

dpkg-reconfigure tzdata                                                 // Europe, Berlin
dpkg-reconfigure locales                                                // de.de utf8
dpkg-reconfigure console-data                                           // Select Keymap f. Arch.l.: qwertz,german,standard,latin1
dpkg-reconfigure keyboard-configuration                                 // immer default, Right-Alt = AltGR, No Compose-Key
dpkg-reconfigure console-common  

shutdown -r now                                                         // locales + Keyboard 'aktivieren'

ifconfig                                                                // Connect?
ifup eth0                                                               // Nein, dann manuell starten

//----------------------------------------------------------------------------------------------------------------------

apt-get install xserver-xorg xinit                                      // XWindow-API
apt-get install build-essential linux-headers-$(uname -r)               // VBoxLinuxAdditions-Setup
apt-get install openbox lxterminal idesk x11-xserver-utils fbpanel      // OpenBox-Setup

mkdir /media/cdrom
mount /dev/cdrom /media/cdrom                                           
sh /media/cdrom/VBoxLinuxAdditions.run                                  // Installation der Gasterweiterungen

shutdown -r now                                                         // VBoxAdditions 'aktivieren'

//======================================================================================================================
VM Client-Customizing:

startx                                                                  // GUI-Desktop starten = Vollbild-Unterstützung
                                                                        // u. Copy/Paste-Funktion. Rechts-Click=Terminal
                                                                        
apt-get install mc sudo cifs-utils                                      // Filemanager, root-Autorisierung, Samba        
apt-get install libdbus-glib-1-2 libasound2                             // Palemoon

dpkg -l flashplugin-nonfree pavucontrol pulseaudio                      // Check!
apt-get install flashplugin-nonfree pavucontrol pulseaudio              // nur fehlende !!! 

nano /etc/default/grub                                                  // edit:   GRUB_TIMEOUT=1
update-grub

visudo                                                                  // add:
    User_Alias EXTRAPERMISSIONS = thomas, inet
    EXTRAPERMISSIONS ALL=(ALL)NOPASSWD:/usr/local/bin/mountctrl

//----------------------------------------------------------------------------------------------------------------------    
Spezielles "persönliches" Customizing, wie z.B. das oben erwähnte "varlog" und mountctrl als Ersatz f. fstab

mount -t cifs -o username=thomas,password=***** //10.10.1.2/HD_1 /mnt

Copy Icons:             /usr/local/share/Icons                          // Desktop-Starter-Icons
Copy Scripts:           /usr/local/bin                                  // mountctrl, mount varlog -> tempfs
Copy Systemd-Unit:      /etc/systemd/systemd                            // mountctrl.service, varlog-service

chown -R root:root /usr/local/share/Icons
chown -R root:root /usr/local/bin
chown -R root:root /etc/systemd/system
                                               
adduser thomas                                                          // Benutzerverwaltung
adduser inet
addgroup downloaduser

adduser thomas downloaduser
adduser thomas inet
adduser inet downloaduser

echo -e "username=thomas\npassword=*****">/home/thomas/.smbcredentials      
chmod 600 /home/thomas/.smbcredentials && chown thomas:thomas /home/thomas/.smbcredentials

mkdir /media/HD_1 && mkdir /media/Downloads && mkdir /media/Install     // Fehlende Verzeichnisse anlegen

chown -R thomas:thomas /home/thomas
chown -R inet:inet /home/inet 

systemctl enable mountctrl.service
systemctl enable varlog.service

//----------------------------------------------------------------------------------------------------------------------
Disable Recommends entfernen 
                              
[ -f "/etc/apt/apt.conf" ] && rm /etc/apt/apt.conf
[ -f "/etc/apt/apt.conf.d/98nosuggests" ] && rm /etc/apt/apt.conf.d/98nosuggests

shutdown -r now                                         

//======================================================================================================================
Zuletzt geändert von TomL am 28.10.2015 17:13:40, insgesamt 5-mal geändert.

TomL

Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope

Beitrag von TomL » 28.10.2015 12:56:59

Als letztes fehlt noch die grundsätzliche OpenBox-Konfiguration, 4 Desktop-Starter und der Autostart des User "inet"

Code: Alles auswählen

mkdir ~/.config/openbox
nano ~/.config/openbox/autostart                                        // add:  
    idesk & 
    fbpanel &
    xsetroot -solid '#23382F' &                                         // Grün
    xsetroot -solid '#2D5297' &                                         // oder Blau
    xsetroot -solid '#0A1D43' &                                         // oder Tiefdunkelblau (eine (!) Farbeinstellung auswählen)

nano ~/.config/fbpanel/default                                          // Selektiv editieren!
    widthtype = percent                                                     
    width = 100
    roundcorners = false
    
    Menu:
    #  action = sudo shutdown -h now
       action = lxterminal -e "sudo /usr/local/bin/mountctrl poweroff"
    
    Plugin {
        type = launchbar
        config {
            button {
                image = /usr/local/share/Icons/totalcommander.png
                tooltip = MidnightCommander
                action = lxterminal -e /usr/bin/mc
            }
            button {
                image = /usr/local/share/Icons/terminal.png
                tooltip = Terminal
                action = /usr/bin/lxterminal
            }
            button {
                image = /usr/local/share/Icons/palemoon3.png
                tooltip = web-browser
                action = /opt/palemoon/palemoon
            }
        }
    }
    
    #plugin {
    #    type = volume
    #}

# Digital Clock
#Plugin {
#    type = dclock
#    config {
#        ShowSeconds = false
#        HoursView = 24
#        TooltipFmt = %A %x
#        #Action = xmessage Please define some command &
#    }
#}

Plugin {
    type = tclock
    config {
        # 2 line view, time in bold above and date below
        #       21:10:42
        # 2015 Oktober 25 Sonntag
#       ClockFmt = <span font="Sans 10" color="darkblue">%-H:%M:%S %P&#xA;%Y %B %e %-A</span>

#       21:42:10
        ClockFmt = <span font="Sans 12, bold" color="darkblue">%-H:%M:%S </span>

        TooltipFmt = %A %x
        #Action =
        ShowCalendar = true
        ShowTooltip = true
    }
}

//--------------------------------------------------------------------------------------------------------------------------------------

Code: Alles auswählen

mkdir /etc/systemd/system/getty@tty1.service.d                          // automatic login via systemd
nano /etc/systemd/system/getty@tty1.service.d/autologin.conf               
    [Service]                                                              
    ExecStart=                                                             
    ExecStart=-/sbin/agetty --autologin "inet" %I                        
                                                                           
nano /etc/profile                                                          
   if [ "$(tty)" = "/dev/tty1" ]; then                                  // in /etc/profile "startx" automatisieren. Eintrag hinzugefügen.
           startx 
           logout
   fi

shutdown -r now
   
//--------------------------------------------------------------------------------------------------------------------------------------
/home/inet/.idesktop/palemoon.lnk

Code: Alles auswählen

table Icon
  Caption: Palemoon
  ToolTip.Caption: Palemoon - WebBrowser
  Command: /opt/palemoon/palemoon
  Icon: /usr/local/share/Icons/palemoon.png
  Width: 32
  Height: 32
  X: 74
  Y: 116
end
/home/inet/.idesktop/lxterminal.lnk

Code: Alles auswählen

table Icon
  Caption: Terminal
  ToolTip.Caption: Terminal-Emulator
  Command: lxterminal
  Icon: /usr/local/share/Icons/terminal.png
  Width: 32
  Height: 32
  X: 74
  Y: 216
end
/home/inet/.idesktop/pavucontrol.lnk

Code: Alles auswählen

table Icon
  Caption: Sound-Control + Mixer
  ToolTip.Caption: Sound-Control + Mixer
  Command: /usr/bin/pavucontrol
  Icon: /usr/local/share/Icons/speakerctrl2.png
  Width: 32
  Height: 32
  X: 239
  Y: 116
end
/home/inet/.idesktop/mountctrl_poweroff_helper.lnk

Code: Alles auswählen

table Icon
  Caption: Shutdown
  ToolTip.Caption: Shutdown-Helper
  Command: lxterminal -e "sudo /usr/local/bin/mountctrl poweroff"
  Icon: /usr/local/share/Icons/poweroff.png
  Width: 32
  Height: 32
  X: 84
  Y: 774
end
Zuletzt geändert von TomL am 28.10.2015 17:04:25, insgesamt 2-mal geändert.

Benutzeravatar
hikaru
Moderator
Beiträge: 13965
Registriert: 09.04.2008 12:48:59

Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope

Beitrag von hikaru » 28.10.2015 13:03:38

Was du da gemacht hast nennt sich "Sandboxing" und ginge auch einfacher und damit schneller (in Sachen Komplexität, nicht Einrichtung). Wenn du dein Sandbox-Debian nicht in eine vollwertige VM sondern nur in ein chroot steckst sparst du dir das Booten eines kompletten virtualisierten Betriebssystems und hättest ebenfalls ein abgeschottetes Userland.
Abgesehen von erhöhtem RAM- und HDD-Verbrauch gäbe es auch keinen merklichen Unterschied bei der Benutzung. Und auch dieser Overhead wäre kleiner als bei einer VM.

TomL

Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope

Beitrag von TomL » 28.10.2015 15:13:28

hikaru hat geschrieben:Was du da gemacht hast nennt sich "Sandboxing" und ginge auch einfacher und damit schneller
Ja, ich kenne natürlich Sandboxing, und genau das war ja auch meine eigentliche Motivation. Und das das auch mit chroot gehen könnte... diese Erkenntnis hatte ich während des Doings... irgendwie hat sich diese Erkenntnis geradezu aufgedrängt.... so sehr, dass ich dann wirklich einige Zeit darüber nachgedacht habe. Und letztendlich habe ich den Gedanken dann doch wieder verworfen... und ich habe einige für mich gute Gründe dafür gefunden.

Der erste Grund -vermutlich der dümmste- ist Misstrauen. Mir fehlt schlicht und einfach das Vertrauen, das quasi-produktiv mit Chroot zu machen, selbst wenn chroot offensichtlich gerade dafür geschaffen ist. Ich assoziere chroot als rein "logische" Trennung von meinen primären System durch eine Verzeigerung auf ein anderes "System" bei Nutzung der gleichen Hardware. Infolgedessen betrachte ich chroot lediglich als temporäres System hinterm Vorhang.... nur hinter einem Vorhang. Ich weiss, dass es theoretisch nicht möglich ist, aus chroot auszubrechen.... wie gesagt, der vermutlich dümmste Grund.... fehlendes Vertrauen. Demhingegen betrachte ich die VM tatsächlich als physisch getrennt.... der VM ist das vorhandensein des Hostrechners anscheinend gar nicht bekannt.... allenfalls durch das Netz. Aber das empfinde ich hinsichtlich meines Misstrauens als absolut genügend.

Der zweite Grund ist die vermutlich gleiche genutzte Hardware.... mit dem wahrscheinlichen Erfolg, dass ich vemutlich den gleichen Bad-Mac-Read-Error und das miese Nachlade-Youtube-Verhalten habe, wie es jetzt auf dem Host besteht. Auch das ist mit meiner Surf-VM gelöst.

Der dritte und für mich wichtigste Grund ist, ich kopiere die VM einfach 1:1 auf mein Homedir unserer 3 Laptops und auf unseren Bürorechner und finde jederzeit die gleiche Umgebung vor und es wird dafür kein neuer Aufwand generiert.

Und das letzte, ich kann die VM einfach auf nen Stick kopieren und kann sie auf jeden beliebigen Rechner ans laufen bringen, wenn eben VirtualBox installiert ist.

Und manchmal handele ich (ganz unvernünftig) auch einfach mal nach der Devise, dass individuell betrachtet manchmal auch mal das zweitbeste das bessere sein kann.. 8)

uname
Beiträge: 12480
Registriert: 03.06.2008 09:33:02

Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope

Beitrag von uname » 28.10.2015 16:24:39

Schöne Anleitung. Vielleicht werde ich mal Teile deiner Openbox-Konfiguration verwenden. Aber du könntest dir noch das Debian-Paket Debiangrml-debootstrap anschauen. Da ist dann die Installation eines Native-Debian über debootstrap doch etwas einfacher. Einfach "grml-debootstrap" ohne Parameter aufrufen. Alles fast so einfach wie eine normale Installation.

Antworten