Adding Digital Ocean Insights to droplet

The digital ocean instructions for adding their insights agent use the out of date apt-key mechanism

Installing using the latest method is simple – make sure the keyrings directory exists:

mkdir -p /etc/apt/keyrings

Then download the key and dearmour to the keyrings directory as follows:

curl https://repos.insights.digitalocean.com/sonar-agent.asc | sudo gpg --dearmour | sudo tee /etc/apt/keyrings/do-insights-repo.gpg > /dev/null

the create the repo source:

echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/do-insights-repo.gpg] https://repos.insights.digitalocean.com/apt/do-agent/ main main" | sudo tee /etc/apt/sources.list.d/digitalocean-agent.list

Then update the repos:

sudo apt update

Install the agent:

sudo apt install do-agent

Check it’s running using:

ps aux | grep do-agent

Now check on the Digital Ocean dashboard you should 5 graphs on the droplet’s Graphs tab instead of 3.

First Experience with new Pos_OS! cosmic desktop

The rust Pop_OS! cosmic desktop app written in Rust by the team an system 76 is currently in pre alpha but you can test it out. It’s probably not ready to use as your daily driver at present. Many thanks to Levi Portenier for his help via the Mattermost chat to allow me to get started with this.

Installation

make sure your system is up to date using the command:

sudo apt update && sudo apt upgrade

Enable Wayland by editing the /etc/gdm3/custom.conf and place a ‘#’ at the beginning of the line that reads WaylandEnable=false. Log out and select your username there should be a cog in the bottom right corner of the password entry page clicking on that should give the option for Pop on Wayland at the time I tested this it was not very stable and the tiled desktop did not work.

Once wayland has been enabled you can install the desktop from the standard repos using the command:

sudo apt install cosmic*

Log out and click on your user name, the cog on bottom right of the password entry screen now has a COSMIC option. Select that and enter your password.

At the time of writing there’s no dock available, the initial screen is quite minimal. At present keyboard control is required. Here are the shortcut I found (or was pointed to by Levi).

Keyboard shortcuts

Super + / – Open the launcher and to run an application by typing it’s name

Super + A – Open the App Library

Super + B – Open the default browser

Super + F – Open the file Manager

Super + G – In Tiled mode (see Super + Y) pop the current window out of the tiled framework. I could not see any way to send the window to the background at present, even when the background window is active.

Super + H – Move workspace to the left

Super + J – When windows are tiled vertically (see Super + O) move to the window above

Super + K – When windows are tiled vertically (see Super + O) move to the window below

Super + L – Move workspace to the right

Super + M – Toggle Maximise the current window

Super + O – Toggle horizontal or vertical tiling

Super + Q – Close the current window

Super + T – Open a terminal

Super + W – Display workspaces

Super + Y – Toggle tiled window

Clicking on the Power button displays a menu from there you can log out, power off and access the Cosmic Settings app (this is still in very early development so options are limited). There does not appear to be any way to adjust the resolution of the screen. I tested this in a VM and could not see any way to make the screen larger than 1024 x 768. According to Levi, this can be configured in /etc/cosmic-comp/config.ron but the default version does not contain any settings for resolution. The standard Gnome Settings app is still available from the application library but as you would expect the settings are not applied to the COSMIC desktop.

The window chrome does not have a maximise button – you can maximise by double clicking on the title bar. However maximised at present seems to cover the top bar.

The default keyboard layout seems to English US. I could not see a way to change this.

Salt Configuration Management Cheat sheet

Delete a user:

sudo salt ‘minion-name’ user.delete username remove=True force=True

Test states:

sudo salt ‘minion-name’ state.test

Useful master configuration

sudo vim /etc/salt/master.d/state-verbose.conf

state_verbose: False

sudo vim /etc/salt/master.d/timeout.conf

timeout: 15

Troubleshooting

Run minion in debug mode

sudo systemctl stop salt-minion

sudo salt-minion -l debug

Can’t perform a sudo salt ‘minion-name’ test.ping:

Log on to minion and set to run in debug if no communication from master check the value of `source address` in /etc/salt/minion.d/base.conf

Upgrading to Onedir (on Ubuntu)

Salt classic is being retired – it will not longer be packaged after version 3005. Onedir (which packages everything, including python, required to run salt in one directory) is the future. To upgrade a new gpg key is required.

Getting started with pnpm

For a long time, I thought why use a different node package manager like yarn – “npm (the package manager that’s installed when you install node) does the job, why make it more complicated?” Then I came across a project that said it installed best with pnpm, I decided to check it out and found it does add value. I’ve switched to using pnpm because it allow management of node which was previously a bit of a faff. Also, when one includes a package in a project it stores the package version in a central repo and adds a link to that package/version so next time you reinstall or use that package / version in another project it does not need to be downloaded again. It also takes care of global installations without using sudo or extra configuration. Check out the website for more benefits.

What follows is a very basic introduction to pnpm on Linux systems partly as an aid memoir to myself but hopefully you find it helpful too! These instructions should work for most Linux distros but I’ve only tried it out on Debian based ones so far.

Installing if you don’t already have node installed

If you don’t have node installed you can install pnpm and use that to install node rather adding the node repo to your system page manger and installing from there. To install so that you can manage node use the command:

curl -fsSL https://get.pnpm.io/install.sh > pnpm-install.sh
# view the file to make sure you're happy running it on your computer
sh ./pnpm-install.sh

or if you don’t have curl you can use “wget -O- https://get.pnpm.io/install.sh | sh -” instead.

You can install the current LTS version of node using the command (other options in place of “lts” allow installing other versions, see the pnpm website for details):

pnpm env use --global lts

Installing if you already have node installed

You can use the script above if you’ve already got node installed however there are also a couple of other If you have a recent version node (versions 16.13 onwards) you can use corepack, run the commands:

corepack enable
corepack prepare pnpm@latest –activate

Or you can install using npm:

npm install -g pnpm

Getting started

Command are often similar to their equivalent npm command and should be run from the project directory.

I find tab completion very useful, to install it for bash zsh or fish shells use the following (and then reload your shell using e.g. source ~/.bashrc or log out and back in again):

pnpm install-completion

To start a new project:

pnpm init

To convert an existing project using a package-lock.json:

pnpm import

To install an existing project – this read from an existing pnpn-lock.yaml to get version information (if it exists, it it does not exist it will be created – you should add this file to your :

pnpm install

Adding dependencies to a project is slightly different to npm. To add a development only dependency use the add command and append “–save-dev” as below, you can optionally specify a tag, version or version range:

pnpm add <package name>[@<tag>|@version>|@<version range>] –save-dev

Add a production dependency (the default add action)

pnpm add <package name>[@<tag>|@version>|@<version range>]

Removing the installed packages is similar to npm (though as pnpm creates links to a central repository it only removed the links to these packages)

pnpm remove <package name>

To run a script you can use the same syntax as npm (pnpm run <script defined in package.json>) but unless your script is a keyword used by pnpm you can simply use:

pnpm <script defined in package.json>

Thanks for reading

I find pnpm much is an improved package manager compared to npm, hopefully you’ve found this useful as an introduction.

Enjoy!

Update your apt keys for Ubuntu and other Debian based operation systems

You may get a warning from a modern Debian based operating system which says:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

Essentially the apt-key framework is being retired and you need to store your keys in separate files in the /etc/apt/trusted.gpg.d/ directory rather than using apt-key to manage

If when you run:

sudo apt-key list

Any keys listed under the heading of

/etc/apt/trusted.gpg

should be migrated. This procedure is described below. Before you start make sure the keyrings directory exists (not required if you are using Ubuntu 22.04)

sudo mkdir -p /etc/apt/keyrings

From the list produced by the “apt-key list” command, a key can be uniquely identified by the last 2 sets of hexidecimal numbers on the second line of the pub section. For example if the numbers are DE57 BFBE you can use the string DE57BFBE to identify the key. So you can export it using the following command (replace the DE57BFBE with the actual last digits of the key and <repo-name> with a unique name in that directory):

sudo apt-key export DE57BFBE | sudo gpg --dearmour -o /etc/apt/keyrings/<repo-name>.gpg

You can then update the repository definition to use this key. for example if your repo was:

deb [arch=amd64] https://repo.awesome.io/repo/py3/ubuntu/22.04/amd64/latest jammy main

and you used the filename awesome.gpg then you’d enter:

deb [signed-by=/etc/apt/keyrings/awesome.gpg arch=amd64] https://repo.awesome.io/repo/py3/ubuntu/22.04/amd64/latest jammy main

You can then list the key using “sudo apt-key list” – and use “sudo apt update” to update your apt indexes.

With all that working delete the old key from the trusted.gpg using the command:

sudo apt-key del DE57BFBE

Enjoy!

Using chroot to install the GRUB2 bootloader

You can use chroot from a live CD or USB to update or install GRUB on a Linux system where, for example, your master boot record has been overwritten by installing windows. This post explains how… If you need to chroot to do something other than fix GRUB you can use the relevant sections of this procedure.

Boot from live CD and access the partition where Linux is installed.

Boot the system from a live CD (you can obtain one from the download section of www.ubuntu.com or www.debian.org, it does not really matter which version or even which Linux distribution as long as it gives you access to a terminal session).  Once booted, on Ubuntu / Debian you can usually open a terminal window using Ctrl-Alt-T or from the Accessories menu or type terminal into the Dash.  I’ve shown all command that need to be run as root proceeded by “sudo” if you have logged in as root or become root using “sudo -i” or “su -” you don’t need to include sudo in each command.

Many modern distros provide the facility to mount the local hard drive automatically using the file manager.  If your system does not automatically mount partitions you’ll need to create a mount point e.g

sudo mkdir /root-partition

You will then need to find the partition containing your linux root partition “sudo fdisk -l” may provide this information.

sudo mount /dev/sda1 /root-partition

From here on I’ll assume your mount point is /root-partition if your distro mounted the drive for you automatically you’ll need to substitute the mount point it created in the following commands.  Alternatively you can create a link to it (this is useful if your system mounts using the very long uuid of the disk. for example if your system mounted the partition as /mount/point/created/automatically create a link to it as follows

sudo ln -s /mount/point/assigned/automatically /root-partition

Prepare for chroot

When you chroot the directory that you specify becomes the new root partition hiding the current one.  To access the devices and processes currently on the system you need to rebind /proc /sys /dev from the existing root partition to the new one this is done using “mount – o bind”

sudo mount -o bind /proc /root-partition/proc
sudo mount -o bind /sys /root-partition/sys
sudo mount -o bind /dev /root-partition/dev
sudo mount -o bind /dev/pts /root-partition/dev/pts

Updating GRUB does not require network connectivity but if you’re using chroot for some other reason you may require it, assuming your your live CD has set up network connectivity you’ll need to the save the resolv.conf and copy the one created on the live cd for DNS to work.

sudo cp /root-partition/etc/resolv.conf /root-partition/etc/resolv.conf-save

sudo  cp /etc/resolv.conf /root-partition/etc/resolv.conf

Now execute the chroot opening a bash session

sudo chroot /root-partition   /bin/bash

Update or install GRUB

Grub is often configured to use a separate partition which is mounted as /boot.  If this is how your system is set up you’ll need to mount this partition (e.g. on the system I’m using to write this tutorial it’s a the fifth partition on the first disk or /dev/sda5, your will almost certainly be different “sudo fdisk -l” may help you indentify it’s usually a small ext2 partition) This is mounted as follows

mount /dev/sda5 /boot

Note you don’t need to use sudo as when you chroot you become root.  Substitute the actual partition that /boot is located on your system.

I’m assuming GRUB was set up correctly before your master boot record was overwritten, if you need to set up grub you should use one of the excellent tutorials out there.  If you’ve installed another linux version on your system you may already have grub setup in the master boot record in which case you can simply run update-grub other wise you’ll need to run grub-install.  Most linux distros provide a GRUB configuration that does a good job of detecting other linux distros and windows.

Before you run update-grub may want to save the current grub.cfg file as follows

cp /boot/grub/grub.cfg /boot/grub/grub.cfg-save

Run update-grub to create the new configuration (this will not change the master boot record however if your system has GRUB installed on the master boot record this will alter the configuration)

update-grub

You can then examine the configuration created by looking at the file /boot/grub/grub.cfg.  Once you are happy that it’s created correctly

grub-install /dev/sda

The master boot record that you need to update is often on the first disk (device name /dev/sda) Note /dev/sda is the entire disk partitions are names from 1 e.g. /dev/sda1)

 Exit from chroot

To exit from chroot it’s the same as exiting from any shell, simply type

exit

or use Ctrl – D

When you reboot, you should now be able to access your linux partition again.

df displays UUID rather than the device name

Several distros set up your boot device in grub using the UUID.  Unfortunately this can cause the output from the df command to display the long uuid (e.g. /dev/disk/by-uuid/0ebcf386-83eb-4639-b1ba-be73a7f60efc) rather than the device name (e.g. /dev/sda1)

To change this edit the file /etc/default/grub on Debian use the command

sudo vi /etc/default/grub

find the line which contains

GRUB_DISABLE_LINUX_UUID=true

If it has a # as the first character on the line this character should be deleted then save the file.

Now update the grub using the command

sudo update-grub

After you reboot the df command will display the device name.

Ubuntu 12.10 on AMD64 hardware reports missing microcode

On upgrading to Ubuntu 12.10 and rebooting the system (which has a AMD Phenom II processor) the system reported “failed to load file amd-ucode/microcode_amd.bin”.

This indicates that the the microcode kernel module has been unable to find the amd-ucode directory in “/lib/firmware”

Fortunately this is easily fixed:

  • create the directory “/lib/firmware/amd-ucode” if it does not already exist using the command 

mkdir /lib/firmware/amd-ucode

  • Browse to http://www.amd64.org/support/microcode.html.  Here you will find information on AMD’s Linux support.
  • Download the file “amd-ucode-latest.tar” you should see a link to this at the bottom of the page.  (It’s good practice when downloading critical software like this to verify the PGP signature of the file, the above page provide conveniently provides instructions so I won’t repeat them here)
  • Extract the file using the Archive manager open a command prompt navigate to the directory where you downloaded the file and type 

tar xf amd-ucode-latest.tar

  • This creates a directory (at the time of writing it is called “amd-ucode-2012-09-10” but you may have a later version)
  • From this directory you need to copy or move the files “microcode_amd.bin” and “microcode_amd_fam15h.bin” the first supports several older generations of AMD hardware and the second supports the 15h family.  There are several readme files and some which provide support for Solaris X86.
  • Copy the microcode_amd.bin files and microcode_amd_fam15h.bin files using the following command (the microcode module will use only the section of these files which are needed for your hardware)

cp microcode_amd.bin   /lib/firmware/amd-ucode

cp microcode_amd_fam15h.bin    /lib/firmware/amd-ucode

  • To activate these modules you can reboot or use the modprobe command to remove and reinstall the microcode kernel module as follows
  • modprobe -r microcode modprobe microcode
  • Next time you boot the “failed to load” message should no longer be displayed and the processor microcode should be updated correctly.
  • To check that it is updated type the following at a command prompt

dmesg | grep microcode

This will display output similar to the following:

[ 14.174582] microcode: CPU0: patch_level=0x010000c8
[ 14.222343] microcode: CPU1: patch_level=0x010000c8
[ 14.223834] microcode: CPU2: patch_level=0x010000c8
[ 14.225326] microcode: CPU3: patch_level=0x010000c8
[ 14.226881] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

 

Change the overlay scroll bars in Ubuntu 11.04 / 11.10

Ubuntu Unity introduced new overlayed scrollbars. If you don’t like them you can remove them as follows.

Command line method

If you are happy using the command line and have sudo privileged, open a terminal window (Ctrl -Alt-T) and type

sudo apt-get remove overlay-scrollbar

You’ll be prompted for your password.  Some applications running may need to be restarted to use the default scrollbars.

Alternative using the Software center

If you don;t have sudo privilege or you prefer a to use the a GUI application.  Open the Ubuntu Software Centre (from launcher or click on the dash and type soft – the software center should appear in the list, click on it)

In the search bar on the top right enter “overlay”. At the botton of this window click on the Display ?? technical items” link. This will display several Scrollbar overlay entries.

Near the top of the list will be one called “Scrollbar Overlayed widget” with a package name of “overlay-scrollbar”. Select the Remove button.

Next find an one or more entry called “Scrollbar overlayed widget – shared lib”. Select the Remove button for each of these in turn.

With all these entries removed your scrollbars should revert to standard scrollbars.

If you have applications running you probably need to close and restart them for the change to take effect. Some applications may require a system restart to make the standard scrollbars available.

Create Launcher in Ubuntu 11.10

Ubuntu 11.10 no longer has the Create Launcher option in the Desktop right click menu. A launcher items can still be created by installing the gnome-panel.

1) Start “Ubuntu Software Center” from the Launcher

2) Type “gnome-panel” into the search bar, the item “launcher and docking facility for GNOME” will be displayed

3) Click on it and if a “Install” button is available on the right side click it. Authenticate when asked to do so

4) When the install is complete open a terminal window (click on the terminal item in the launcher.

5) Type “gnome-desktop-item-edit ~/Desktop/ –create-new” and press enter. The following window will be displayed
Create Launcher Dialog

6) Enter the details of the program, change the icon by clicking on the icon and choosing an appropriate icon and click OK.

7) You now have launcher item on the Desktop to add this to the launcher. Open your Home Folder. (if hidden files are not shown press Ctrl + H and browse to .local/share/applications. Drag and drop your Launcher item from Desktop to that folder.

8) Now drag and drop your launcher from .local/share/applications to the Launcher Bar on the left on your Screen.

9) You can now delete your custom Launcher on the Desktop if it’s still there.

10) Enjoy…