How to install a Linux computer the way I like it ================================================= Introduction ------------ The following explains how to install a machine just the way I like it. The same instructions work for a remote machine e.g. on Digital Ocean, as a local Linux laptop. Some configuration files (e.g. ssh keys) are obviously private so I don't share them here. After installing the base OS the whole process takes about an hour. Disk partitions --------------- I install from scratch on every OS release, alternating between two 16G+ partitions, and using a third partition `/localbackup` to transfer data between the two (and for backups). I don't bother to keep a separate `/home` partition because of ever-changing user configuration files. Base OS ------- Generally Ubuntu or Ubuntu derivative like Mint. Update with: sudo apt-get update sudo apt-get upgrade And reboot. Create my user -------------- sudo adduser --disabled-password tcorbettclark sudo ---- Add tcorbettclark to the sudo Linux group by editing `/etc/group` Remove need for passwords for sudo group using `visudo` to set: %sudo ALL=(ALL) NOPASSWD: ALL Once confirmed I can login remotely as `tcorbettclark`, edit `/etc/ssh/sshd_config` to disable password login and disable root login. Restart ssh daemon: sudo systemctl restart ssh NTP --- sudo apt-get install ntp And check after a while that `ntpq` reports successful time syncs. Fish shell ---------- sudo add-apt-repository ppa:fish-shell/release-2 sudo apt-get update sudo apt-get install fish chsh -s /usr/bin/fish mkdir -p ~/.config/fish/functions cp fish/functions/* ~/.config/fish/functions/ cp fish/ ~/.config/fish/ SSH --- Create the `.ssh` folder with su - tcorbettclark mkdir .ssh chmod 700 .ssh Add DSA and RSA public and private keys, and create ~/.ssh/authorized_keys Configure preferences (e.g. SSH fowarding) with cp ssh/config ~/.ssh/ Reduce permissions for `~/.ssh` files with chmod 600 .ssh/* Note that all private keys should be encrypted using e.g.: openssl pkcs8 -topk8 -v2 des3 -in ~/.ssh/id_rsa.old -out ~/.ssh/id_rsa Setup ssh-agent --------------- Once after reboot, start an ssh-agent and store the SSH_AUTH_SOCK in a fish universal environment variable: set -ex SSH_AUTH_SOCK set -Ux SSH_AUTH_SOCK (fish -c (ssh-agent -c)'; echo $SSH_AUTH_SOCK') (Note that we have explicitly told tmux to not override this. See tmux.conf) Add keys to the agent with ssh-add Install Mosh ------------ Install the mosh-server sudo apt-get install mosh If needed, install better fonts e.g. in Secure Shell Chrome plugin, set the user-css to Then set the font-family to "Source Code Pro for Powerline". Setup Tmux ---------- Use tmux-next with sudo add-apt-repository -yu ppa:pi-rho/dev sudo apt-get update -yqqu sudo apt-get install -yqqu python-software-properties software-properties-common sudo apt-get install -yqq tmux-next Create `~/.tmux.conf`: cp tmux/tmux.conf ~/.tmux.conf Python, pip, pew, etc --------------------- Install latest pip system-wide using: curl "" -o "" sudo python Install pew (and virtualenv) only for my user: pip install pew --user Update PATH to include user install packages made by pew: set --universal fish_user_paths $fish_user_paths /home/tcorbettclark/.local/bin Configure pip: cp pip/pip.conf ~/.config/pip/pip.conf Prepare to use pythonz to manage Python installations. See sudo apt-get install build-essential zlib1g-dev libbz2-dev libssl-dev libreadline-dev libncurses5-dev libsqlite3-dev libgdbm-dev libdb-dev libexpat-dev libpcap-dev liblzma-dev libpcre3-dev Now just use e.g. `pew new -p (pew locate_python 3.6.0) test` to create virtualenvs with specific versions of python. Nodejs ------ Get up to date version of node: curl -sL | sudo -E bash - sudo apt-get install -y nodejs Mercurial --------- sudo apt-get install gcc python-dev pip install mercurial --user Add my hg user settings cp hg/hgrc ~/.hgrc Git --- sudo apt-get install git git config --global "Timothy Corbett-Clark" git config --global "" git config --global credential.helper cache git config --global core.editor "subl -n -w" git config --global color.ui true Cloud 9 ------- Follow their instructions. Dropbox for file syncing, sharing, and backups ---------------------------------------------- Install [Dropbox]( by following their instructions. To speed up synchronising, seed the Dropbox directory from a local copy. Encfs for encrypting files e.g. on Dropbox ------------------------------------------ I use [Encfs]( to encrypt certain files stored on Dropbox. Mount my encrypted folder: mkdir -p /home/tcorbettclark/Private encfs /home/tcorbettclark/Dropbox/Private /home/tcorbettclark/Private Note that absolute paths must be used. When needed, nmount with: fusermount -u /home/tcorbettclark/Dropbox/Private Sublime text editor ------------------- Download and install [Sublime Text]( sudo add-apt-repository ppa:webupd8team/sublime-text-2 sudo apt-get update sudo apt-get install sublime-text Add the licence key by cutting and pasting into the sublime menu from: /home/tcorbettclark/Private/install/License.sublime_license Define my preferred keybindings by seeding from * <> Install sublime's own package manager by following instructions on * <> Then add Sublime packages, e.g.: * Stylus * LESS * Coffeescript * Side Bar Enhancements * Sublime Files * Origami * INI * hg4subl * backbone.js * cucumber * cucumber completion * My own <> Then set my preferences from * <> Also open a coffeescript file, go to Preferences->Settings - More->Syntax Specific - User and add { "tab_size": 2 } Also may need to edit the "binDir" setting in CoffeeScript.sublime-settings. Xterm ----- Allow meta-forward-word to work, and set fonts and colours: * Edit.Keyboard Shortcuts - disable all menu access * Set font to Ubuntu Mono size 11 Other ----- sudo apt-get install htop jq