From Things and Stuff Wiki
Jump to: navigation, search

Things and Stuff Wiki - An organically evolving personal wiki knowledge base with an on-the-fly taxonomy containing a patchwork of topic outlines, descriptions, notes and breadcrumbs, with links to sites, systems, software, manuals, organisations, people, articles, guides, slides, papers, books, comments, videos, screencasts, webcasts, scratchpads and more. Quality varies drastically. Use the Table of Contents to navigate long pages, use the Small-ToC and Tiny-ToC header links on longer pages. Not that mobile friendly atm. #tnswiki on freenode IRC for feedback chat, or see About for login and further information. / et / em


A box, yer computer, physical (or abstract) box. [1]

These are the steps that I follow (and create) when I set-up Arch Linux. They are incomplete.

See also Stack, *nix#Configuration 2, Server, Distros, Distros#Live Distro

Arch Linux install

Todo: convert parts into this style -

Initial setup

Setup for ArchISO environment.

# set keyboard for UK qwerty, gives access to pipe character, etc.
loadkeys /usr/share/kbd/keymaps/i386/qwerty/

# check for potentially failed services (i.e. network dhcp)
systemctl --failed

# update pacman software list
pacman -Sy

# install terminfo for urxvt
pacman -S rxvt-unicode
# and reconnect via ssh


# if there isn't a network already..

# for wifi-menu / wpa_cli to work
vim /etc/wpa_supplicant/base.conf
# new file


# get wifi interface name
ip a



# start wpa_supplicant
wpa_supplicant -B -i interfacename -c /etc/wpa_supplicant/base.conf

# establish wifi data link


  set_network 0 ssid "MYSSID"
  set_network 0 psk "passphrase"
  enable_network 0

  # or for open wifi
  set_network 0 key_mgmt NONE
  enable_network 0


### for wifi and ethernet???
# establish ip linkcli
dhcpcd [interface]

File storage


# there can be only 4 'primary' partitions in the MBR. if not using LVM, make the fourth 'extended' so it can contain further 'logical' partitions
# filesystem partition size ideas:
# /boot - 512M
  # contains boot kernel images (linux, linux-lts, linux-ck, etc.) - Type: linux (83)
# [swap]
  # swap size to match RAM size - Type: linux swap (82)
# /
  # one large partition for the rest - Type: linux (83) OR linux LVM (8e)

# all-in-one partitioning, boot flag and swap partition setup
echo -e "n\n\n\n\n+512M\n n\n\n\n\n+1G\n n\n\n\n\n\n a\n1\n t\n2\n82\nw\n"|
fdisk /dev/vda

# check drive partitions

# formatting
# boot as ext2 (no journal for less fuckups?)
mkfs.ext2 /dev/sda1
e2label /dev/sda1 /boot

mkfs.ext4 /dev/[partition]

# create swap partition
mkswap /dev/[swappartition]
swapon /dev/[swappartition]

# mount partitions - root first
mount /dev/mapper/<lv-root> /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

# give device label, for file managers -
e2label /dev/XXX <label>

LVM (optional)

# managing storage devices with LVM allows for easier partition resizing, etc. later
# see

# scan for available devices

# create physical volume
pvcreate /dev/DEVICE

# create and add to internal drive volume group
vgcreate <volume_group> /dev/DEVICE

vgextend <volume_group> <physical_volume>

# or
vgcreate <volume_group> /dev/sda2 /dev/sdb1 /dev/sdc

# lvm partition ideas:
#/ logical volume, will contain /usr (includes installed programs)
   # 100G - Bootable - Type: linux (83)
# /var logical volume - contains misc. including spools, logs, packages downloaded for installation. separate to avoid running out of space
   # 100G - Type: linux (83)
# /home logical volume - contains user home folders, where media will be stored
   # remainder Gb Type: linux (83)

# create partition group
lvcreate -C y -L 50G <volume_group> -n <lv_name>


# check drive partitions

# format drive partitions
# boot as ext2
mkfs.ext2 /dev/sda1
e2label /dev/sda1 /boot

mkfs.ext4 /dev/mapper/[partition]
# repeat for each partition, excluding swap partition

# create swap partition
mkswap /dev/[swappartition]
swapon /dev/[swappartition]

# mount partitions - root first
mount /dev/mapper/<lv-root> /mnt

mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

mkdir /mnt/var
mount /dev/mapper/<lv-var> /mnt/var

mkdir /mnt/home
mount /dev/mapper/<lv-home> /mnt/home

# if mirroring with raid1;
lvconvert --type raid1 -m 1 /dev/milk-hdd-internal/logicalvolume /dev/sdd1

# give device label, for file managers -
e2label /dev/XXX <label>


# use geographically close arch package mirror
vim /etc/pacman.d/mirrorlist
# move local mirror at top of the list. this config is also copied across in the next step.

# bootstrap including the installation of pacman and a few extras
pacstrap /mnt base base-devel archlinux-keyring pacman-contrib syslinux zsh polkit netctl openssh p7zip reflector iotop mlocate ripgrep fzf vim git tmux htop atop dmidecode fasd ncdu dfc tree pkgfile rxvt-unicode wget bind-tools dhcping exfat-utils sshfs

# generate file system configuration info
genfstab -p /mnt >> /mnt/etc/fstab

# chroot into new system
arch-chroot /mnt

#optional extra
pacman -S linux-headers linux-lts linux-lts-headers lvm2 

pacman -S wpa_supplicant dialog dnsmasq dnscrypt-proxy


# set root user password

# add your own user account and set a password
useradd -m [USERNAME]
passwd [USERNAME]

# let wheel group use sudo for root permission
# uncomment %wheel      ALL=(ALL) ALL

## USERNAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

# add user to wheel group for sudo/etc, access
gpasswd -a [USERNAME] wheel

Name, time, language

# set a hostname
echo computer_name > /etc/hostname

# set timezone
ln -s /usr/share/zoneinfo/Europe/London /etc/localtime

# uncomment en_GB.UTF-8 or appropriate locale
vim /etc/locale.gen

# generate locale

# set locale conf
echo LANG=en_GB.UTF-8 > /etc/locale.conf

# set persistant console keymap and font preferences in /etc/vconsole.conf
vim /etc/vconsole.conf

Kernel images

# edit mkinitcpio.conf
vim /etc/mkinitcpio.conf
  # add lvm2 to hooks

  HOOKS=" ... block lvm2 filesystems ... "
  # uncomment "xz" compression

# build boot arch and lts boot images
mkinitcpio -p linux linux-lts


# install bootloader: syslinux (installed above)
syslinux-install_update -i -a -m
# the above does this:
# fdisk for boot flag
# dd bs=440 count=1 if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda
#CAUTION - edit /boot/syslinux/syslinux.cfg to use correct device/mapper addresses

# OR
# install bootloader: GRUB
# syslinux is easier to manage than GRUB
#pacman -S grub
#grub-install --recheck --target=i386-pc /dev/sdx

# allow for saving the last booted kernel, edit /etc/default/grub, set
# and add

# generate/regenerate config file
#grub-mkconfig -o /boot/grub/grub.cfg


# set better network interface device names in relation to their MAC (media access control) address.
#vim /etc/udev/rules.d/10-network.rules

# if only one active interface:
echo SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="$(cat /sys/class/net/$(ls /sys/class/net/ | grep -v lo | grep -v wlan)/address)", NAME="eth0" > /etc/udev/rules.d/

# if there is wifi (to fix):
#echo SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="$(cat /sys/class/net/**wifiinterfacename**/address)", NAME="wlan0" >> /etc/udev/rules.d/

# enable DHCP
# multiple network management methods are available

# dhcpcd for all interfaces
systemctl enable dhcpcd
systemctl start dhcpcd

# netctl (arch dev grown systemd interface)
cp /etc/netctl/examples/ethernet-dhcp /etc/netctl
cp /etc/netctl/examples/wireless-wpa /etc/netctl
vim /etc/netctl/wireless-wpa
# change essid and key

# test netctl ethernet profile
netctl start ethernet-dhcp
ip a
netctl stop ethernet-dhcp

# test netctl wireless-wpa profile
netctl start ethernet-dhcp
ip a
netctl stop wireless-wpa

# make ethernet profile persistant
netctl enable ethernet-dhcp

systemctl enable dnsmasq

# either use straight DNS
# set dns resolver (router)
# see for a pair of public DNS server address to set
#vim /etc/resolv.conf

# or use encrypted DNS
# install dnscrypt

# setup dnsmasq config to listen to port 40 instead of 53
vim /etc/dnsmasq.conf


# make a network socket for dnscrypt to use port 40
systemctl edit dnscrypt-proxy.socket


# create a unit file for dnscrypt with your chosen resolver
cp /usr/lib/systemd/system/dnscrypt-proxy.service /etc/systemd/system
vim /etc/systemd/system/dnscrypt-proxy.service

   # following [ resolver] works

# make sure dnsmasq doesn't fall over due from dnscrypt not responding while it starts up
cp /usr/lib/systemd/system/dnsmasq.service /etc/systemd/system/
vim /etc/systemd/system/

   # edit to load After=dnscrypt-proxy.service
systemctl daemon-reload

# um.. could be above? edit file after auto copy rather than before?
systemctl enable dnscrypt-proxy.service

 vim /etc/resolv.conf


# setup ssh access
systemctl enable sshd
systemctl start sshd
# reboot
# ctrl-alt-del is quickest

pacman -S fail2ban

Video drivers

# find out graphics chipset
lspci | grep -e VGA -e 3D

# find gfx chipset drivers to install
pacman -Ss xf86-video | grep ##something##

# install gfx drivers
pacman -S xf86-video-ati # or whatever package

# hardware video acceleration, framebuffer support
pacman -S libva-mesa-driver xf86-video-fbdev

AUR and Git

# bootstrap AUR access with AUR helper pacaur
# yay > trizen > pacaur w/ pacget > yaourt > *

mkdir -p ~/pkgs && cd ~/pkgs && git clone && cd yay-git && makepkg -si

yay -S --answeredit n --answerdiff n pkgcacheclean cower longoverdue inxi fd-rs localepurge neobundle-git dtrx

#gpg --recv-key [keyfromerror]

SSH and dotfiles

# Make .ssh directory
mkdir ~/.ssh

# Generate an [[SSH]] key using EdDSA (SHA-512/256 and Curve25519)
ssh-keygen -t ed25519 -b 4096 -C "" -f $HOME/.ssh/id_[keynamehere]

# Ensure ssh-agent is enabled for this shell instance
eval "$(ssh-agent -s)"

# Add your SSH key to the ssh-agent
ssh-add ~/.ssh/id_[whatever]

# install; vcsh myrepos
yay -S --answeredit n --answerdiff n  vcsh-git myrepos-git

git clone ~/.zgen

mkdir -p ~/.zsh/cache/`hostname --short`

# bootstrap vcsh
vcsh clone

# edit config.d symlinks to available.d
cd .config/mr/available.d

# mr bootstrap
mr up


# if you want a graphical login, install a display manager #
#yay -S --answeredit n lightdm lightdm-gtk-greeter
#systemctl enable lightdm.service

localectl set-x11-keymap gb

# install basic X11 related
yay -S --answeredit n --noedit xorg-server xorg-xinit xorg-xsetroot xorg-xrdb xorg-xset xorg-xev \
 rxvt-unicode-fontspacing-noinc-vteclear-secondarywheel terminus-font terminus-font-ttf ttf-ms-fonts \
 urxvtcd py3status checkupdates-aur xorg-xinput arandr xorg-xprop

# set X11 keyboard layout
sudoedit /etc/X11/xorg.conf.d/20-keyboard.conf

 Section "InputClass"
    Identifier "keyboard"
    MatchIsKeyboard "yes"
    Option "XkbLayout" "gb"
    Option "XkbVariant" "nodeadkeys"

# install X11 window manager
# bspwm-git sxhkd-git - using i3 now.

yay -S --answeredit n i3-gaps

# install other X11 related
yay -S --answeredit n autocutsel xscreensaver compton dunst hsetroot feh dmenu pnmixer-git redshift unclutter \
 radiotray lxappearance workrave xorg-xdpyinfo xdotool glxinfo systemd-numlockontty gohufont

# enable numlock for ttys and X
systemctl enable numLockOnTty
# doesn't work?

# set the default browser
gio mime x-scheme-handler/http google-chrome.desktop
gio mime x-scheme-handler/https google-chrome.desktop


# install software
yay -S --answeredit n --answerdiff n links-g-directfb smartmontools gsmartcontrol youtube-dl-git dnscrypt-proxy-gui meld xcwd-git google-chrome caffeine-ng dolphin dolphin-plugins qt5ct fortune-mod ttf-symbola

# update pkgfile search cache
sudo pkgfile --update

systemctl enable pkgfile-update.timer

# set Git config
# if not using vcsh managed git config
#git config --global USERNAME
#git config --global MAILADDRESS


# Set up ACPI
yay -S --answeredit n apci acpid vattery wicd wicd-gtk tlp hdparm mons

systemctl enable acpid.service

sudoedit /etc/udev/rules.d/99-lowbat.rules

  # Suspend the system when battery level drops to 5% or lower
  SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-5]", RUN+="/usr/bin/systemctl hibernate"

# add vattery and wicd-gkt --tray to .xinitrc

# Set up touchpad

yay -S --answeredit n xf86-input-libinput

# intel video chipset?
sv /etc/X11/xorg.conf

Section "Device"
    Identifier  "Card0"
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"

sv /etc/X11/xorg.conf.d/30-touchpad.conf

Section "InputClass"
        Identifier "MyTouchpad"
        MatchIsTouchpad "on"
        Driver "libinput"
        Option "Tapping" "on"


yay -S kdeconnect indicator-kdeconnect

   exec --no-startup-id /usr/bin/indicator-kdeconnect
   # in .xinitrc


to check

yay -S --answeredit n syncthing syncthing-gtk syncthing-inotify

systemctl --user enable syncthing.service

# to get api key

mkdir /etc/systemd/user/syncthing-inotify.service.d/

sudoedit /etc/systemd/user/syncthing-inotify.service.d/start.conf

  ExecStart=/usr/bin/syncthing-inotify -logflags=0 -api="0M6ubcgtcy7KBLucu0jeXrgqB8U7YKp9"

  edit api

systemctl --user enable syncthing-inotify.service

#sudo ln -s /home/milk/.zshrc /root/.zshrc
#sudo ln -s /home/milk/.zsh /root/.zsh
#sudo ln -s /home/milk/.vimrc /root/.vimrc
#sudo ln -s /home/milk/.vim /root/.vim


to actually sort

See also Backup

yay -S --answeredit n pakbak-git

sudo mkdir -p /var/backup/pakbak

sudoedit /etc/pakbak.conf

 # edit backup folder to /var/backup/pakbak

systemctl enable pakbak

* tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local

### Borg

# list intentionally installed packages
#pacman -Qqe

# Backup paths;
# /home/*
# /etc
# /var
# /boot
# /opt?
# etc..?

# Exclude

Virtual machine

yay -S --answeredit n linux-headers virtualbox virtualbox-host-dkms

sudoedit /etc/mkinitcpio.conf

    # add to end of modules (not hooks!)

sudo mkinitcpio -p linux

sudo modprobe vboxdrv



# install some apps
yay -S --answeredit n jack2 pulseaudio-jack cadence-git carla-git lv2-plugins sequencer64 audacity audacity-extras

slim (old)

i'm using lightdm now

yay -S --answeredit n slim slim-themes 

# make slim login desktop manager start automatically
systemctl enable slim.service

# edit slim config - default_user, focus_password, current_theme sleep-openbox
vi /etc/slim.conf


## usb drive partition - 8Gb

## lvm raid 1
# root filesystem
/media     # external media mount point
/proc      # process info virtual filesystem
/sys       # system and kernel info virtual filesystem
/run       # running system shit virtual filesystem


  /lmedia  # large block size


# ramdisk 

# swap 


droid sans mono 10

Config management

??? b0rken?

yay -S --answeredit n vcsh myrepos
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github_rsa
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/github_rsa
< ~/.ssh/
# add new key on
mkdir ~/.zsh/cache/$HOST
touch ~/.zsh/cache/$HOST/last-working-dir
# rm ~/.gtkrc-2.0
vcsh clone git:// mr
mr up


Once all is working:

vcsh enter whateverrepo
  # only need to do this to change git remotes n such, not for general config editing
vcsh foreach add -u
  # add all tracked but uncomitted files in all repos

vcsh commit
  # commit all

vcsh push
  # push all repos

Old Ubuntu setup



sudo apt-get update
sudo apt-get install tmux git
git clone ~/.tmux
ln -s ~/.tmux/.tmux.conf ~/.tmux.conf

sudo apt-get install curl zsh ncdu htop tree mercurial build-essential gcc libc6-dev ncurses-dev

sudo git clone ~/.zsh && cd ~/.zsh && sudo git submodule init && sudo git submodule update
  # edit zshrc location config 
useradd -m -s /usr/bin/zsh milk
passwd milk
adduser milk sudo

sudo apt-get remove vim vim-runtime gvim
  # (disable distro vim. not possible with apt on ubuntu [2])
mkdir ~/src && mkdir ~/src/vim
hg clone ~/src/vim && cd ~/src/vim && ./configure --enable-pythoninterp=yes && make && sudo make install

git clone ~/.vim
ln -s ~/.vim/vimrc ~/.vimrc
mkdir ~/.vim/bundle
git clone git:// ~/.vim/bundle/neobundle.vim
echo ':NeoBundleInstall' > ~/viminit.txt
echo ':q' >> ~/viminit.vim
vim -s ~/viminit.vim
rm ~/viminit.vim
git clone    vimproc ......

wget -O src/atop.tar.gz && cd ~/src && tar zxvf atop.tar.gz && cd ~/src/atop && ./configure && make && make install

vim /etc/ssh/sshd_config
  # disable root, change port, etc.
ssh-keygen -t rsa
  # (for user and root?)

To sort: multiuser config. permissions? Or /usr/share/config/ ...

apt-get install php mariadb
apt-get install ruby rubygems
apt-get install python pip



Live USB

See Distros#Live Distro