Rewrite setup.org for Bluefin.

This commit is contained in:
2024-07-29 06:41:33 +12:00
parent 99999fbdc3
commit 48cca56e6c

215
setup.org
View File

@ -4,90 +4,32 @@
#+DATE: <2022-11-15 Tue 09:15> #+DATE: <2022-11-15 Tue 09:15>
This guide will walk through how I setup fresh installations of [[https://pop.system76.com/][POP!_OS]]. Pop!_OS is a free and open-source Linux distribution, based upon Ubuntu, and featuring a customized GNOME desktop environment known as COSMIC. The distribution is developed by American Linux computer manufacturer System76. Pop!_OS is primarily built to be bundled with the computers built by System76, but can also be downloaded and installed on most computers. This guide will walk through how I setup fresh installations of [[https://projectbluefin.io][Bluefin]]. Bluefin strives to cover these two use cases; For end users it provides a system as reliable as a Chromebook with near-zero maintainance, with the power of homebrew, flathub, and a container runtime to give you access to all the best software Open Source has to offer.
Pop!_OS provides full out-of-the-box support for both AMD and Nvidia GPUs. It is regarded as an easy distribution to set up for gaming, mainly due to its built-in GPU support. Pop!_OS provides default disk encryption, streamlined window and workspace management, keyboard shortcuts for navigation as well as built-in power management profiles. I use Bluefin 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.
I use POP!_OS 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 * Install brew packages
After installing the distribution I ensure the following directories are present in my home folder as they are relied on by other automated steps in this setup process: Additional packages are ideally sourced from [[https://docs.brew.sh/Homebrew-on-Linux][Homebrew for Linux]], with [[https://flathub.org/][Flathub]] for anything I can't find in brew. Included in this repository is my ~Brewfile~ of packages.
#+NAME: Setup home folder strucuture
#+begin_src shell
# Ensure we are in our home folder and create required directories
cd ~/ && mkdir Documents Downloads
#+end_src
* Install base packages
Now that we have our home directory done let's install the standard packages we use.
#+begin_src tmux #+begin_src tmux
sudo apt install --yes btop nvtop screenfetch git curl wget xclip wl-clipboard xsel emacs xterm xtermcontrol jq tmux apt-transport-https dict gh unrar ripgrep brew bundle install
#+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 tmux
# 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 #+end_src
When working with kubernetes applications we often use [[https://helm.sh][helm]], let's download and install the latest release from github. * Secret management
#+NAME: Install helm
#+BEGIN_src tmux
wget $(sed 's/.\{1\}$//' <<< $(curl -s https://api.github.com/repos/helm/helm/releases/latest | grep -oP 'https...get.helm.sh.helm-v\d+.\d+.\d+-linux-amd64.tar.gz[)]'))
tar xf helm*.tar.gz linux-amd64/helm --transform 's,linux-amd64,,' && rm -rf helm-*linux-amd64.tar.gz
sudo mv helm /usr/local/bin/helm
#+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 tmux
sudo pip install --upgrade pip && sudo pip3 install podman-compose
#+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. 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 The ~bw~ utility should already be installed as part of our homebrew packages. Let's login now.
#+NAME: Login to bitwarden
#+begin_src tmux #+begin_src tmux
# Download the latest release
wget "https://vault.bitwarden.com/download/?app=cli&platform=linux" --output-document "bw.zip"
# Unzip and install the latest release
unzip "bw.zip" && sudo install "bw" "/usr/local/bin" && rm "bw" "bw.zip"
# Login to bitwarden
bw login mail@jamesblair.net bw login mail@jamesblair.net
#+end_src #+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 tmux
pip3 install ansible
#+END_SRC
* Restore ssh keys and dotfiles * Restore ssh keys and dotfiles
I make extensive use of ~.dotfiles~ to further customise my environment. The script below restores my versions of key dotfiles automatically. I make extensive use of ~.dotfiles~ to further customise my environment. The script below restores my versions of key dotfiles automatically.
@ -143,22 +85,7 @@ source ~/.bashrc
** Optional - Cloud provider tools ** Optional - Cloud provider tools
Currently ~kubectl~ is packaged separately to ~gcloud~ and other cloud provider tools so let's install that first. For working with google cloud platform we use the [[https://cloud.google.com/sdk/][GCP SDK]], which provides our cli tools. Unfortunately we [[https://github.com/orgs/Homebrew/discussions/3594][can't install it via brew on Linux]] so we need to install it manually.
#+NAME: Install kubectl
#+begin_src tmux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/
which kubectl && kubectl version
rm kubectl
#+end_src
For working with google cloud platform we use the [[https://cloud.google.com/sdk/][GCP SDK]], which provides our cli tools.
#+NAME: Install google cloud sdk #+NAME: Install google cloud sdk
#+BEGIN_src tmux #+BEGIN_src tmux
@ -173,58 +100,17 @@ tar xvf gcpsdk.tar -C /home/${USER}/.var/bin && rm gcpsdk.tar
#+END_SRC #+END_SRC
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]]. ** Optional - Setup doom emacs
#+NAME: Install amazon web services cli An integral part of my development workflow is [[https://github.com/doomemacs/doomemacs][Doom Emacs]]. Below are the instructions to set this up.
#+NAME: Install and configure doom
#+BEGIN_src tmux #+BEGIN_src tmux
# Download the binary git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
cd ~/Downloads/ ~/.config/emacs/bin/doom install
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 #+END_SRC
Included in this repository is a ~doom/~ subdirectory which layers my personal preferences on top of doom.
**
** Optional - Nodejs dev tooling
Some of my project work involves working with [[https://nodejs.org/en][nodejs]] and for package management namely we sometimes use [[https://www.npmjs.com/][node package manager]]. The code below installs node ~16.x~, which is the latest stable release as of <2022-09-16 Fri>.
#+NAME: Install nodejs
#+BEGIN_src tmux
# 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
# Install yarn dependency manager
sudo npm install --global yarn
#+END_SRC
** Optional - Install hardware drivers
** Optional - Setup humacs editor
An integral part of our pair development workflow is [[https://github.com/humacs/humacs][humacs]]. Below are the instructions to set this up.
#+NAME: Install and configure humacs
#+BEGIN_src tmux
# Clone down humacs
git clone --recursive https://github.com/jmhbnz/humacs /home/$USER/Downloads/
# Need to ensure environment variables are set for load path
export EMACSLOADPATH=/home/$USER/Downloads/humacs
#+END_SRC
Included in this repository is a ~.bashrc~ and ~humacs-custom.el~ which layer my personal preferences on top of humacs.
** Optional - Setup sbp powerline prompt ** Optional - Setup sbp powerline prompt
@ -236,20 +122,6 @@ As you can see in the screenshot, contextual "segments" are presented in the pro
[[./images/powerline-prompt.png]] [[./images/powerline-prompt.png]]
To set up this prompt the first thing we need to do is install powerline fonts:
#+NAME: Install powerline fonts
#+begin_src tmux
# Install the powerline fonts package
sudo apt-get install fonts-powerline
# Refresh the system font cache
sudo fc-cache --force --verbose
#+end_src
Once powerline fonts are installed we need to install simple bash prompt:
#+NAME: Install simple bash prompt #+NAME: Install simple bash prompt
#+begin_src tmux #+begin_src tmux
# Clone the repository # Clone the repository
@ -306,56 +178,3 @@ sbp toggle peekaboo k8s
#+end_src #+end_src
Congratulations - you should now have a functional, good looking and informative bash prompt! 🎉 Congratulations - you should now have a functional, good looking and informative bash prompt! 🎉
** Optional - Setup mutt mail client
For reading email we ideally use a cli based client for fast searching and lightweight mail reading.
The [[https://gitlab.com/muttmua/mutt/][mutt]] mail client fills these roles well for imap mailboxes.
The first step to setup mutt is to ensure it is installed.
#+NAME: Install mutt
#+BEGIN_src tmux
sudo apt-get install -y mutt urlscan
#+END_SRC
After installing mutt we then need to create configuration directories and files.
#+NAME: Create mutt config files
#+BEGIN_src tmux
mkdir -p ~/.mutt/cache/headers
mkdir ~/.mutt/cache/bodies
touch ~/.mutt/certificates
#+END_SRC
One configuration folders and files exist we just need to populate our user mutt configuration file with a configuration for our particular mail provider.
The example provided in this repository utilises the ~bitwarden~ cli utility for secrets to ensure these are securely gathered at runtime and not stored in the file.
** Optional - Rust dev tooling
I've been tinkering with learning the [[https://www.rust-lang.org/][Rust]] programming language lately, to set that up follow these steps:
#+NAME: Install pre-requisites
#+begin_src tmux
# Ensure pre-requisites are installed
sudo apt install curl build-essential gcc make -y
#+end_src
#+NAME: Install rust via helper script
#+begin_src tmux
# Install rust via helper 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 tmux
rustc -V && cargo -V
#+end_src