# -*- ii: ii; -*- #+TITLE: Linux Mint Setup #+AUTHOR: James Blair #+EMAIL: mail@jamesblair.net #+DATE: <2022-01-16 Sun 11:00> This guide will walk through how I setup fresh installations of [[https://linuxmint.com/][Linux Mint]]. Linux Mint is an operating system for desktop and laptop computers. It is designed to work 'out of the box' and comes fully equipped with the apps most people need. I use Linux Mint as my daily driver operating system on a variety of different machines. The intent of this guide is to make it easy for me to get back up and running quickly whenver I do a fresh installation. * Setup home directory structure * Configure apt to use a local mirror To speed up how quickly our system can install new or updated packages we should tell ~apt~ to use a mirror here in New Zealand. #+begin_src tmate # Backup our apt sources configuration before we make changes sudo cp /etc/apt/sources.list.d/official-package-repositories.list /etc/apt/sources.list.d/official-package-repositories.list.bak # Replace packages repo with local sudo sed -i 's|https://packages.linuxmint.com|http://ucmirror.canterbury.ac.nz/linux/mint/packages|g' /etc/apt/sources.list.d/official-package-repositories.list # Replace base repo with local sudo sed -i 's|https://archive.ubuntu.com/ubuntu|http://ucmirror.canterbury.ac.nz/ubuntu|g' /etc/apt/sources.list.d/official-package-repositories.list #+end_src * Install base packages Now that we have our ~apt~ package manager configured let's install the standard packages we use. #+begin_src tmate sudo apt install --yes htop screenfetch git curl wget xclip emacs xterm xtermcontrol jq tmux tmate apt-transport-https #+end_src For working with container images locally outside of kubernetes clusters we use [[https://podman.io/][~podman~]] so that we can avoid the security problems of a standard docker daemon. Follow the steps below to install podman: #+begin_src tmate # Add the repositories to our apt sources echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list # Add the repository key curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key" | sudo apt-key add - sudo apt update && sudo apt --yes install podman #+end_src Finally, we should upgrade the python package manger ~pip~ that we installed, before using it to install [[https://github.com/containers/podman-compose][podman-compose]]. #+NAME: Upgrade pip #+BEGIN_SRC tmate sudo pip install --upgrade pip && sudo pip3 install podman-compose #+END_SRC For additional package management namely ~bitwarden~ we use [[https://www.npmjs.com/][node package manager]]. The code below installs node ~16.x~, which is the latest stable release as of <2021-10-02 Sat>. #+NAME: Install node #+BEGIN_SRC shell # Curl down the shell script for adding version 16 of nodejs to apt sudo curl -sL https://deb.nodesource.com/setup_16.x | sudo bash - # Install the nodejs package via apt sudo apt-get install -y nodejs #+END_SRC For managing secrets we use [[https://bitwarden.com/][bitwarden]] which provides a great [[https://github.com/bitwarden/cli][cli utility]]. Additionally in our [[.bashrc][bashrc]] file included in this repository there are a number of helper functions to make working with ~bw~ easier. #+NAME: Install bitwarden and login #+BEGIN_SRC tmate # Install the bitwarden cli via node package manager sudo npm install -g @bitwarden/cli # Test login to bitwarden bw login mail@jamesblair.net #+END_SRC For ad-hoc system administration we use [[https://deb.nodesource.com/setup_12.x ][ansible]]. We install ansible via ~pip3~ to ensure any modules or additional packages required at a later date can be easily managed. For significant ansible or python projects a virtual environment for python is suggested to keep project packages separate from system python packages. #+NAME: Install ansible via pip #+BEGIN_SRC tmate pip3 install ansible #+END_SRC We use [[https://helm.sh][helm]] for packaging applications for kubernetes so let's install that now. Unfortunately we need an extra repository for this so let's separate this into a new step: #+NAME: Install helm #+BEGIN_SRC tmate curl https://baltocdn.com/helm/signing.asc | sudo apt-key add - echo "deb https://baltocdn.com/helm/stable/debidan/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update && sudo apt install -y helm #+END_SRC * Restore ssh keys and dotfiles * Optional configuration ** Optional - Cloud provider tools For working with [[https://aws.com][Amazon Web Services]] we need the [[https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html][AWS CLI]]. #+NAME: Install amazon web services cli #+BEGIN_SRC tmate # Download the binary cd ~/Downloads/ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # Install unzip awscliv2.zip sudo ./aws/install # Clean up rm -rf ~/Downloads/aws* #+END_SRC ** Optional - Install hardware drivers ** Optional - Setup humacs editor ** Optional - Setup mutt mail client ** Optional - Install rust I've been tinkering with learning the Rust programming language lately, to set that up follow these steps: #+NAME: Install rust #+begin_src tmate # Ensure pre-requisites are installed sudo apt install curl build-essential gcc make -y # Install rust via setup script curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh #+end_src Once installed you can check if the rust compiler is installed with the code block below: #+NAME: Verify installation #+begin_src tmate rustc -V && cargo -V #+end_src