Rewrite setup.org for Bluefin.
This commit is contained in:
215
setup.org
215
setup.org
@ -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
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user