Installing Debian the hard way
This manual attempts to show how to install a minimal debian system with dwm as a window manager and some simple command line tools on a lvm2 setup without using an installer.
Please beware: you will have to modify many of these instructions according to your machine and wishes, make sure to understand exactly what the commands do before using them and modify them accordingly, since those package selections are tuned for my notebook.
Also make sure to first read it as a whole before beginning.
Step 1: Preparations
Download a debian live iso, for example this one including non-free drivers :http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/8.6.0-live+nonfree/amd64/iso-hybrid/debian-live-8.6.0-amd64-standard+nonfree.iso, and generate a bootable usb thumbdrive or CD from it.
Boot it up, log in as the user „user“ with the password „live“ and make sure to have internet access. Find out which drivers you will need later, especially graphics and network drivers.
Start with the following commands:
sudo su
apt install lvm2 console-data debootstrap
This will log you in as root and install some utilities that are needed for the installation, as well as configure your keyboard.
Step 2: Partitioning
If the hard drive you wish to install on, has no partitions, create a partition now, e. g. with fdisk.
Assuming you want to install your full system on a lvm2 container on /dev/sda1, run the following:
pvcreate /dev/sda1
vgcreate DEBIAN /dev/sda1
lvcreate -L10G -n ROOT DEBIAN
lvcreate -L8G -n SWAP DEBIAN
lvcreate -L20G -n HOME DEBIAN
This will create a physical lvm2 volume on partition /dev/sda1
, creates the volume group DEBIAN and adds three logical volumes: named ROOT, SWAP and HOME. Depending on your available amount of disk space you may choose bigger sizes, ROOT should be 8-20 GB, SWAP 2 times the amount of your RAM size and HOME should hold enough space for your personal data. It is a good idea to keep some spare space, as you can resize partitions accordingly later on, if needed.
Following commands create the file systems for these partitions.
mkfs.ext4 /dev/mapper/DEBIAN-ROOT
mkfs.ext4 /dev/mapper/DEBIAN-HOME
mkswap /dev/mapper/DEBIAN-SWAP
Following commands mount the partitions under /mnt
, where the system will get installed.
mount /dev/mapper/DEBIAN-ROOT /mnt
mkdir /mnt/home
mount /dev/mapper/DEBIAN-HOME /mnt/home
swapon /dev/mapper/DEBIAN-SWAP
Step 3: Debootstrapping
This command will install the system packages, some of them might not be applicable to you, so be sure to know every package before continuing and choose the right server for yourself:
debootstrap --arch amd64 --components=main,contrib,non-free \ --include=linux-image-3.16.0-4-amd64,linux-headers-3.16.0-4-amd64, \ grub-pc,lvm2,zsh-static,bash-completion,terminator,xserver-xorg-core,\ xserver-xorg-input-kbd,xserver-xorg-input-mouse,xserver-xorg-input-synaptics, \ xserver-xorg-video-radeon,xserver-xorg-video-fbdev,xinit,neovim,emacs-nox, \ dwm,suckless-tools,links2,w3m,git,rfkill,tree,htop,apvlv,fakeroot,wget,less, \ build-essential,feh,cmus,aptitude,sudo,pwgen,openssh-server,openssh-client, network-manager stable /mnt http://ftp.de.debian.org/debian/
Step 4: Configuration
The following commands will changeroot into your new system:
cp /etc/mtab /mnt/etc/mtab
mount -o bind /dev /mnt/dev
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
chroot /mnt /bin/bash
Now you can configure your new system from within:
nano /etc/fstab
/dev/mapper/DEBIAN-ROOT / ext4 errors=remount-ro 0 1 /dev/mapper/DEBIAN-HOME /home ext4 defaults 0 2 /dev/mapper/DEBIAN-SWAP none swap sw 0 0 tmpfs /tmp tmpfs noatime 0 0 tmpfs /var/tmp tmpfs noatime 0 0
This mounts the 3 partitions you've just created on every boot and additionally mounts /tmp
and /var/tmp
into the ram to speed many things up for the cost of just a little bit of your RAM. If you do not want this behaviour, just remove the last 2 lines.
Now we configure apt
, the package manager, in two steps: First of all we tell apt
not to install recommended nor suggested packages, if you do want this, just skip the second edit.
nano /etc/apt.conf
APT::Install-Recommends "0"; APT::Install-Suggests "0";
Second we configure the source servers for apt
to pull packages from (make sure to take the right server again):
nano /etc/apt/sources.list
deb http://ftp.de.debian.org/debian/ stable main contrib non-free deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free deb http://security.debian.org/ stable/updates main contrib non-free deb-src http://security.debian.org/ stable/updates main contrib non-free deb http://ftp.de.debian.org/debian/ stable-updates main contrib non-free deb-src http://ftp.de.debian.org/debian/ stable-updates main contrib non-free
apt update
Now we configure the network settings. First we add a hostname to identify the system in the local network:
echo debian > /etc/hostname
Now we configure interfaces and hosts:
nano /etc/hosts
Append the following in a new line: 127.0.1.1 debian
nano /etc/network/interfaces
Comment out everything but the loopback device ( by prepending # ) since we want to use network manager.
nano /etc/NetworkManager/NetworkManager.conf
Change managed=false to managed=true
We install and configure the grub bootloader:
grub-install /dev/sda
nano /etc/default/grub
GRUB_CMDLINE_LINUX="dolvm"
grub-mkconfig -o /boot/grub/grub.cfg
Add an user and lock the root
account since we want to use sudo
:
adduser user –gid 27 –shell /bin/bash –home /home/user
passwd -l root
The group ID (gid) 27 marks the group named sudo, so our user is allowed to run commands using the program sudo.
Finally, we configure the software for our user to some reasonable defaults.
apt install console-setup
apt install console-data
apt install keyboard-configuration
apt install broadcom-sta-dkms
This sets up usable keyboard and console configs and installs the broadcom wlan driver that needs to be done from inside the chroot.
Now we configure dwm:
apt-get build-dep dwm
mkdir /usr/src -p
cd /usr/src
apt-get source dwm
cd dwm*
cp config.def.h config.h
nano config.h
change according lines to the following:
static const char selfbordercolor[] = "#C80003"; static const char selfbgcolor[] = "#C80003"; static const char *termcmd[] = {"terminator", NULL };
make install
make clean
Create config directories in the user's home directory:
mkdir -p /home/user/.config/{nvim,terminator}
Configure neovim:
nano /home/user/.config/nvim/init.vim
set enc=utf-8
set fenc=utf-8 set termencoding=utf-8 set nocompatible set autoindent set smartindent set tabstop=4 set shiftwidth=4 set textwidth=120 set t_Co=256 syntax on set number set showmatch set comments=s1:/*,mb:\ *,elx:\ */
Configure terminator : -
nano /home/user/.config/terminator/config
append :
[profiles] [[default]] background_image=None custom_command = /bin/zsh-static font = Noto Mono 12 scrollback_lines = 100000 scrollback_position = hidden use_custom_command = True
Make dwm
xinit's standard choice for startx :
echo "exec dwm" >> /home/user/.xinitrc
Clean up and reboot (be sure to remove the install medium before rebooting in your new system!), to start the GUI of your new system just type „startx“ after logging in as your user.
apt-get clean
update-initramfs -u -k all
exit
reboot
- remove install medium
Enjoy!