Skip to content

Instantly share code, notes, and snippets.

@dmgolembiowski
Forked from webern/linux-is-hard.md
Created January 26, 2023 11:19
Show Gist options
  • Save dmgolembiowski/4c5382c3aa5d09f46f299890176becdc to your computer and use it in GitHub Desktop.
Save dmgolembiowski/4c5382c3aa5d09f46f299890176becdc to your computer and use it in GitHub Desktop.

Fedora

Setup a Separate Boot Device

device=/dev/sda
sudo wipefs --all $device
sudo dd if=/dev/zero of=$device bs=102400 count=2000
sudo parted $device --script mklabel gpt
sudo parted --script $device mkpart --align optimal efi fat32 4MiB 1GiB
sudo parted --script $device set 1 esp on
sudo parted --script $device print

Setup LVM

I'm having a hard time understanding btrfs. I'm going to create a single logical volume and let Fedora do its thing inside of it.

Destroy lvm:

sudo vgchange -an $VGNAME
sudo lvremove -f -y $VGNAME
sudo vgremove $VGNAME
sudo vgreduce --removemissing $VGNAME
sudo pvremove -y -ff /dev/nvme0n1p2
sudo pvremove -y -ff /dev/nvme1n1p2
sudo wipefs --all /dev/nvme1n1
sudo wipefs --all /dev/nvme0n1
sudo dd if=/dev/zero of=/dev/nvme1n1 count=1000 bs=1MiB
sudo dd if=/dev/zero of=/dev/nvme0n1 count=1000 bs=1MiB

Setup LVM Before Install

sudo lsblk

sudo wipefs --all /dev/nvme0n1
sudo parted --script /dev/nvme0n1 mklabel gpt
sudo parted --script /dev/nvme0n1 mkpart lvm0 btrfs 2048s 100%
sudo parted --script /dev/nvme0n1 set 1 lvm on

sudo wipefs --all /dev/nvme1n1
sudo parted --script /dev/nvme1n1 mklabel gpt
sudo parted --script /dev/nvme1n1 mkpart lvm0 btrfs 2048s 100%
sudo parted --script /dev/nvme1n1 set 1 lvm on

#sudo fdisk -l /dev/nvme1n1
#sudo lsblk -o name,mountpoint,label,size,uuid
#sudo parted --script /dev/nvme1n1 --list

sudo pvcreate /dev/nvme0n1p2 /dev/nvme1n1p2

VGNAME=vostok
sudo vgcreate $VGNAME /dev/nvme0n1p1 /dev/nvme1n1p1

Create an ext4 filesystem on a logical volume

sudo mkfs.ext4 /dev/vostok/dropbox
# i.e.
# sudo mkfs.ext4 /dev/volume_group/logical_volume_name

btrfs is a mystery

This is from when I thought I could set up something like LVM with btrfs and then install Fedora into it. I didn't really understand it and Anaconda is totally arcane.

sudo wipefs --all /dev/nvme0n1
sudo wipefs --all /dev/nvme1n1
sudo dd if=/dev/zero of=/dev/nvme0n1 bs=10240 count=100000
sudo dd if=/dev/zero of=/dev/nvme1n1 bs=10240 count=100000
sudo parted /dev/nvme0n1 --script mklabel gpt
sudo parted /dev/nvme1n1 --script mklabel gpt
sudo mkfs.btrfs -m single -d single -L vostok /dev/nvme0n1 /dev/nvme1n1 -f
sudo rm -rf /mnt/vostok
sudo mkdir /mnt/vostok
sudo mount -t btrfs /dev/nvme0n1 /mnt/vostok
sudo btrfs subvolume create /mnt/vostok/root


#sudo chown $(id -u $(whoami)):$(id -g $(whoami)) /mnt/nvme

Ubuntu

Setting up LVM Prior to OS Install

Destroy lvm:

sudo vgchange -an $VGNAME
sudo lvremove -f -y $VGNAME
sudo vgremove $VGNAME
sudo vgreduce --removemissing $VGNAME
sudo pvremove -y -ff /dev/nvme0n1p2
sudo pvremove -y -ff /dev/nvme1n1p2
sudo wipefs --all /dev/nvme1n1
sudo wipefs --all /dev/nvme0n1
sudo dd if=/dev/zero of=/dev/nvme1n1 count=1000 bs=1MiB
sudo dd if=/dev/zero of=/dev/nvme0n1 count=1000 bs=1MiB

Setup LVM Before Install

sudo lsblk

sudo wipefs --all /dev/nvme0n1
sudo parted /dev/nvme0n1 --script mklabel gpt
sudo parted --script /dev/nvme0n1 mkpart --align optimal efi fat32 1MiB 600MiB
sudo parted --script /dev/nvme0n1 set 1 esp on
sudo mkfs -t vfat /dev/nvme0n1p1
sudo parted --script /dev/nvme0n1 mkpart --align optimal linux0 ext4 600MiB 100%
sudo parted --script /dev/nvme0n1 set 2 lvm on
sudo parted --script /dev/nvme0n1 print

WINDOWS_SIZE=170GiB
sudo wipefs --all /dev/nvme1n1
sudo parted /dev/nvme1n1 --script mklabel gpt
sudo parted --script /dev/nvme1n1 mkpart --align optimal windows ntfs 1MiB $WINDOWS_SIZE
sudo parted --script /dev/nvme1n1 mkpart --align optimal linux1 ext4 $WINDOWS_SIZE 100%
sudo parted --script /dev/nvme1n1 set 2 lvm on
sudo parted --script /dev/nvme1n1 print

#sudo fdisk -l /dev/nvme1n1
#sudo lsblk -o name,mountpoint,label,size,uuid
#sudo parted --script /dev/nvme1n1 --list

sudo pvcreate /dev/nvme0n1p2 /dev/nvme1n1p2

#VGNAME=somename
sudo vgcreate $VGNAME /dev/nvme0n1p2 /dev/nvme1n1p2

sudo lvcreate --name swap --size 64g $VGNAME
sudo lvcreate --name root --size 750g $VGNAME
sudo lvcreate --name home --size 750g $VGNAME
sudo lvcreate --name vms --size 750g $VGNAME
sudo lvcreate --name dropbox --size 750g $VGNAME

# If you want to use the free space on a device
# sudo lvcreate --name root --extents 100%FREE $VGNAME /dev/nvme0n1

When I tried to do the above steps without formatting the efi partition, the installer reported:

The attempt to mount a file system with type vfat in /dev/nvme0n1p1 at /boot/efi failed.

You may resume partitioning from the partitioning menu.

Software Installations

Lots of Packages

sudo apt update && \
sudo apt install -y \
  apt-transport-https \
  build-essential \
  cmake \
  curl \
  git \
  glances \
  gparted \
  hddtemp \
  libssl-dev \
  lm-sensors \
  openssh-server \
  terminator \
  tree \
  vim \
  zsh \
  p7zip-full \
  p7zip-rar

Google Chrome

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt-get update 
sudo apt-get install google-chrome-stable

Zsh

If necessary:

cd ~
mkdir repos
cd repos
git clone git@github.com:webern/shell.git
sudo apt install -y zsh
zsh
cd $HOME
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
ln -s $HOME/repos/shell/mjb.zsh-theme $HOME/.oh-my-zsh/custom/themes/mjb.zsh-theme
mv $HOME/.bash_profile $HOME/.bash_profile.old
mv $HOME/.bashrc $HOME/.bashrc.old
mv $HOME/.zshrc $HOME/.zshrc.old
rm -f ~/.gitconfig && ln -s $HOME/repos/shell/linux/gitconfig ~/.gitconfig
cd $HOME/repos/shell
./install.sh
source ~/.zshrc
rm -rf $HOME/.alacritty $HOME/.config/alacritty/
mkdir -p $HOME/.config/alacritty/
ln -s $HOME/repos/shell/linux/alacritty.yml $HOME/.config/alacritty/alacritty.yml
if [ -d $HOME/.cinnamon ]; then mv $HOME/.cinnamon $HOME/.cinnamon.backup; fi
ln -s $HOME/repos/shell/linux/.cinnamon $HOME/.cinnamon

Alacritty (Requires Rust)

rustup override set stable
rustup update stable
sudo apt-get install -y cmake pkg-config libfreetype6-dev libfontconfig1-dev libxcb-xfixes0-dev libxkbcommon-dev python3
cd $HOME/repos
git clone git@github.com:alacritty/alacritty.git
# this needs to return without error
infocmp alacritty
# if it didn't...
# sudo apt-get install -y libncurses5-dbg
# sudo tic -xe alacritty,alacritty-direct $REPOS/alacritty/extra/alacritty.info
cd $REPOS/alacritty
cargo build --release
sudo cp $REPOS/alacritty/target/release/alacritty /usr/local/bin
sudo cp $REPOS/alacritty/extra/logo/alacritty-term.svg /usr/share/pixmaps/Alacritty.svg
sudo desktop-file-install $REPOS/alacritty/extra/linux/Alacritty.desktop
sudo update-desktop-database
sudo update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator /usr/local/bin/alacritty 50
sudo update-alternatives --config x-terminal-emulator

Dropbox

deb

cd /tmp
curl -L https://www.dropbox.com/download?dl=packages/ubuntu/dropbox_2020.03.04_amd64.deb -o dropbox.deb
sudo dpkg -i dropbox.deb
rm dropbox.deb

rpm

cd /tmp
curl -Lo dropbox.rpm https://www.dropbox.com/download?dl=packages/fedora/nautilus-dropbox-2020.03.04-1.fedora.x86_64.rpm
sudo dnf install -y ./dropbox.rpm
rm dropbox.rpm

GDU Disk Usage Analyzer

RPM

curl -Lo gdu.rpm https://github.com/dundee/gdu/releases/download/v5.13.2/gdu-5.13.2-1.x86_64.rpm
sudo dnf install -y ./gdu.rpm
rm gdu.rpm

Docker

sudo apt-get remove docker docker-engine docker.io containerd runc || true
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo sh -c "echo '{\"experimental\": true}' > /etc/docker/daemon.json" 
sudo docker run -it --rm hello-world

sudo groupadd docker || true
sudo usermod -aG docker $USER
newgrp docker 
docker run -it --rm hello-world

Recommendations from a smart engineer to make Fedora work:

❯ cat /etc/docker/daemon.json
{
  "experimental": true,
  "features": {
    "buildkit": true
  },
  "selinux-enabled": false
}

❯ cat /etc/sysconfig/docker
# /etc/sysconfig/docker
BUILDKIT_STEP_LOG_MAX_SIZE=100000000
BUILDKIT_STEP_LOG_MAX_SPEED=100000000

# Modify these options if you want to change the way the docker daemon runs
OPTIONS=" \
  --log-driver=journald \
  --live-restore \
  --default-ulimit nofile=1024:1024 \
  --init-path /usr/libexec/docker/docker-init \
  --userland-proxy-path /usr/libexec/docker/docker-proxy \
"

Sensor Modules

sudo apt install hddtemp lm-sensors
sudo sensors-detect
# after adding the modules to /etc/modules
cat /etc/modules
sudo systemctl restart systemd-modules-load.service

Then you need to add an option to the kernel start command. https://askubuntu.com/a/1145982/825042

  • sudo vim /etc/default/grub
  • Then set the GRUB_CMDLINE_LINUX option to the following:
# This allows fan usage to be read by lm-sensors
GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"

Save the file and close, then update your GRUB settings:

sudo update-grub

AWS

cd /tmp
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
rm -rf aws
rm -rf awscliv2.zip
cd ~
aws configure

Also add this line to your ~/.aws/config profile to turn off paging:

cli_pager=

SSM Session Manager plugin:

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
sudo dnf install ./session-manager-plugin.rpm

IAM Authenticator

curl -o aws-iam-authenticator https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/aws-iam-authenticator
chmod +x ./aws-iam-authenticator
sudo install -o root -g root -m 0755 ./aws-iam-authenticator /usr/local/bin/aws-iam-authenticator
rm -f ./aws-iam-authenticator
curl -Lo docker-credential-ecr-login https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/0.6.0/linux-amd64/docker-credential-ecr-login
sudo install -o root -g root -m 0755 ./docker-credential-ecr-login /usr/local/bin/docker-credential-ecr-login
rm -f ./docker-credential-ecr-login

Kubernetes Stuff

Default Kubeconfig is the worst idea ever. Avoid ever using a default kubeconfig file by placing a read-only directory where the file would normally go.

mkdir -p $HOME/.kube/config
sudo chown 1000:1000 $HOME/.kube
sudo chown 1000:1000 $HOME/.kube/config
sudo chmod 0000 $HOME/.kube/config
cd /tmp
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo rm /usr/local/bin/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
rm kubectl
cd ~
KUBECONFIG=/tmp/foo kubectl version
cd /tmp
VERSION_WITH_V=v1.0.4
curl -L "https://github.com/kubernetes-sigs/cluster-api/releases/download/${VERSION_WITH_V}/clusterctl-linux-amd64" -o clusterctl
sudo rm -f /usr/local/bin/clusterctl
sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl
rm -f clusterctl
cd ~
clusterctl version
Kind

Go here to find out what the latest version is: https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

KIND_VERSION=v0.11.1
cd /tmp
curl -Lo ./kind https://kind.sigs.k8s.io/dl/$KIND_VERSION/kind-linux-amd64
sudo rm -f /usr/local/bin/kind
sudo install -o root -g root -m 0755 kind /usr/local/bin/kind
rm kind
cd ~
kind version
Eksctl
cd /tmp
curl --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo rm -f /usr/local/bin/eksctl
sudo install -o root -g root -m 0755 /tmp/eksctl /usr/local/bin/eksctl
rm eksctl
cd ~
eksctl version
Sonobuoy
# Version without the "v"
SBVERSION=0.56.10
SBURL="https://github.com/vmware-tanzu/sonobuoy/releases/download/v${SBVERSION}/sonobuoy_${SBVERSION}_linux_amd64.tar.gz"
cd /tmp
curl -L -o sonobuoy.tar.gz "${SBURL}"
tar xz -f sonobuoy.tar.gz
rm sonobuoy.tar.gz
sudo install -o root -g root -m 0755 /tmp/sonobuoy /usr/local/bin/sonobuoy
rm sonobuoy
sonobuoy version

Rust

Do this after dot files have already been set up (so that CARGO_HOME and PATH are ready):

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Go

VER=1.17.9
sudo rm -rf "${GOROOT}"
curl -L "https://go.dev/dl/go${VER}.linux-amd64.tar.gz" -o go.tar.gz
rm -rf /tmp/goroot && mkdir /tmp/goroot
sudo tar -C /tmp/goroot -xzf go.tar.gz
sudo mv /tmp/goroot/go "${GOROOT}"
rm go.tar.gz
go version

JetBrains Toolbox

# You cannot curl this one so I have a copy in dropbox
cd /tmp
curl -L https://www.dropbox.com/s/icc9kkmchbayd15/jetbrains-toolbox-1.22.10970.tar.gz\?dl\=0 -o jetbrains-toolbox.tar.gz
tar xf jetbrains-toolbox.tar.gz
rm jetbrains-toolbox.tar.gz
cd *jetbrains-toolbox-*
chmod +x jetbrains-toolbox
./jetbrains-toolbox
cd ..
rm -rf *jetbrains-toolbox-*

Vscode

deb

curl -Lo /tmp/vscode.deb https://go.microsoft.com/fwlink/?LinkID=760868
sudo apt install /tmp/vscode.deb
rm -f /tmp/vscode.deb
sudo apt --only-upgrade install code

rpm

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
dnf check-update
sudo dnf install code

Sublime

deb

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
sudo apt install apt-transport-https
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
sudo apt update
sudo apt install sublime-text
subl /tmp/foo

# merge
sudo apt-get install sublime-merge
smerge --version

rpm

sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg
sudo dnf config-manager --add-repo https://download.sublimetext.com/rpm/stable/x86_64/sublime-text.repo
sudo dnf install sublime-text
sudo dnf install sublime-merge
subl --version
smerge --version

VMWare

Fedora 36

Ummm, it doesn't work on Fedora 35? Edit: Ok, this was obscure but finally found the answer here:

The key is to set CPATH to the correct linux headers directory:

This was the part causing pain:

sudo CPATH=/usr/src/kernels/$(uname -r)/include/linux vmware-modconfig --console --install-all

The complete steps look like:

sudo dnf install -y kernel-devel-$(uname -r) kernel-headers
# maybe reboot?
# now loadload VMware Workstation Pro using a web browser:
# https://www.vmware.com/go/getworkstation-linux
cd ~/Downloads
sudo chmod 700 VMware-Workstation-Full-*.bundle
sudo ./VMware-Workstation-Full-*.bundle
sudo CPATH=/usr/src/kernels/$(uname -r)/include/linux vmware-modconfig --console --install-all

Pain in the ass, it needs to happen after each reboot. https://confluence.jaytaala.com/display/TKB/Recompile+VMWare+Workstation+%28or+player%29+kernel+modules+on+boot+with+systemd+service

Write this to /etc/systemd/system/vmware-modules-rebuild.service

[Unit]
Description=Recompiles vmware modules
 
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'CPATH=/usr/src/kernels/$(/usr/bin/uname -r)/include/linux exec /usr/bin/vmware-modconfig --console --install-all'

[Install]
WantedBy=multi-user.target

Performance Issue with VMWare

I saw kcompactd0 on the host, and when I did, the guest was impossible to use. This solution worked: https://communities.vmware.com/t5/VMware-Workstation-Pro/VMWare-workstation-in-a-fistfight-with-Linux-Memory-Compactor/td-p/2876992

Specifically, as root, turn off the compaction like this:

sudo sh -c 'echo 0 > /proc/sys/vm/compaction_proactiveness'

Fedora 37 (36? typo?)

The VMWare modules are not compatible with newer kernels. This awesome person patched the necessary files https://github.com/mkubecek/vmware-host-modules/ This awesome pull request gives me the codez https://github.com/mkubecek/vmware-host-modules/pull/1/files

Save the patch files, edit to your version of VMWare workstation:

PATCH_DIR="/usr/lib/vmware_patch/"
REPOSITORY_URL="https://github.com/mkubecek/vmware-host-modules"
VMWARE_PRODUCT="workstation-16.2.4"
sudo mkdir -p "${PATCH_DIR}"
sudo rm -rf "${PATCH_DIR}/${VMWARE_PRODUCT}.zip"
sudo curl -L "${REPOSITORY_URL}/archive/${VMWARE_PRODUCT}.zip" -o "${PATCH_DIR}/${VMWARE_PRODUCT}.zip"

Save this script to, e.g. /usr/local/bin/fix_vmware.sh and chmod +x it.

#!/bin/bash
PATCH_DIR="/usr/lib/vmware_patch/"
MODULE_ROOT="/usr/lib/vmware/modules/source/"
REPOSITORY_URL="https://github.com/mkubecek/vmware-host-modules"
VMWARE_PRODUCT="workstation-16.2.4"

############
## fix_vmware.sh
## 
## This script expects be run as root or equivalent.
##
## This script will replace the source code of your VMWare Product's Modules with patched
## versions from github:mkubecek/vmware-host-modules.
##
## Set the VMWARE_PRODUCT variable above to the workstation- or player-version you are
## using, and run this script. In extreme cases, a reboot may be necessary to get the
## updated modules loaded in.
############

mkdir -p "${PATCH_DIR}"
rm -rf "${PATCH_DIR}/vmware-host-modules-${VMWARE_PRODUCT}"
rm -rf $MODULE_ROOT/{vmmon-only,vmnet-only}
rm -rf $MODULE_ROOT/{vmmon-only.tar,vmnet-only.tar}
rm -f $MODULE_ROOT/{vmmon.tar,vmnet.tar}

## Unpack the Patched Files ##
unzip "${PATCH_DIR}/${VMWARE_PRODUCT}.zip" -d "${PATCH_DIR}"

## Repack (tar) and Install the Upstream Patched Files to the VMWare Modules Folder ##
pushd "${PATCH_DIR}/vmware-host-modules-${VMWARE_PRODUCT}"
  tar cf vmmon.tar vmmon-only
  tar cf vmnet.tar vmnet-only

  mv vmmon.tar $MODULE_ROOT/
  mv vmnet.tar $MODULE_ROOT/
popd

## Invoke the VMWare Module Configuration tool
vmware-modconfig --console --install-all

Then write this to /etc/systemd/system/vmware-modules-rebuild.service

[Unit]
Description=Recompiles vmware modules
 
[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/fix_vmware.sh

[Install]
WantedBy=multi-user.target

virt-manager install (not related to vmware):

sudo dnf -y install bridge-utils libvirt virt-install qemu-kvm libvirt-devel virt-top libguestfs-tools guestfs-tools
lsmod | grep kvm
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
sudo dnf -y install virt-manager

GitHub CLI

GHVERSION=2.5.2
GHURL="https://github.com/cli/cli/releases/download/v${GHVERSION}/gh_${GHVERSION}_linux_amd64.tar.gz"
cd /tmp
curl -L -o gh.tar.gz "${GHURL}"
tar xz -f gh.tar.gz
rm gh.tar.gz
sudo install -o root -g root -m 0755 /tmp/gh_${GHVERSION}_linux_amd64/bin/gh /usr/local/bin/gh
rm gh
gh version

Checkouts

cd $HOME/repos
git clone git@github.com:webern/bottlerocket.git
cd bottlerocket
git remote add upstream git@github.com:bottlerocket-os/bottlerocket.git
#
cd $HOME/repos
git clone git@github.com:webern/bottlerocket-test-system.git
cd bottlerocket-test-system
git remote add upstream git@github.com:bottlerocket-os/bottlerocket-test-system.git
#
cd $HOME/repos
git clone git@github.com:webern/testsys-mcm.git
git clone git@github.com:webern/mx.git
#
rm -rf $HOME/repos/mybr
cd $HOME/repos
git clone git@github.com:webern/mybr.git
#
cd $HOME/repos
git clone git@github.com:d15989de37d0b78948f17fb68050571a.git
mv d15989de37d0b78948f17fb68050571a linux-is-hard

Settings

I want to use control-alt-left and control-alt-right for JetBrains back/forward navigation. Turns out not all key commands are shown in the Gnome settings UI. I need to remove Ubuntu/Gnome default commands.

First we can see the problem:

gsettings get org.gnome.desktop.wm.keybindings switch-to-workspace-left
gsettings get org.gnome.desktop.wm.keybindings switch-to-workspace-right

If we unmap these then the key combo becomes available for other uses.

gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "[]"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "[]"

Gnome Solid Color Background

To set a color, for example "Dark Aubergine" from here https://design.ubuntu.com/brand/colour-palette/

gsettings set org.gnome.desktop.background picture-uri ""
gsettings set org.gnome.desktop.background primary-color '#2C001E'

Clock:

gsettings set org.gnome.desktop.interface clock-format 12h

Getting Airpods to work as a Headset on Ubuntu

This is a horror show, but this blog gave some very clear instructions: https://reckoning.dev/blog/airpods-pro-ubuntu/

Unfortunately, though. The instructions above did not solve the problem for me. The Airpods do not show up as a microphone that I can select even when they are in "Headset Head Unit (HSP/HFP)" configuration.

image

Actually these instructions left me in a state where my Sony bluetooth headphones could no longer be used as a headset, so I rolled back to an LVM snapshot to undo these changes. Then the Sony headphones worked again.

TODO

Check this out for inspiration, or maybe even use it? https://github.com/rbreaves/kinto

General

Journal

Errors:

-p 3 means priority err, -x provides extra message information, and -b means since last boot and --no-pager prevents truncating and using less

journalctl -p 3 -xb --no-pager

Scp

Get something from a host named sourcehost:

scp mjb@sourcehost:/source/file/path /local/file/path

Push something to a host using a key

scp -i ~/.ssh/some.pem  ~/Downloads/some.file username@some-host.com:/home/username

Wireguard

To enable a service for a wireguard configuration, if the configuration is /etc/wireguard/blah.conf, then:

sudo systemctl enable --now wg-quick@blah

To stop and disable:

sudo systemctl disable wg-quick@blah
sudo systemctl stop wg-quick@blah

Keys

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
chmod 600 ~/.ssh/id_rsa

Extracting things from PEM

To get an RSA public key from some.pem:

openssl rsa -in some.pem -pubout > id_rsa.pub

To get the ssh-rsa public key thingy:

ssh-keygen -f some.pem -y

To get the RSA private key:

openssl rsa -in some.pem -out id_rsa
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment