If the HP Universal print driver cannot automatically retrieve a printer configuration (say SNMP is blocked on the network or disabled on the device) it defaults to monochrome printing (UPD version 5.0 and newer). This can also lead to long pauses while trying to open the printer properties, as it presumably times out while trying to retrieve the data. On the Device Settings tab, click Device Type: Auto Detect to display the drop-down list and then select Color (and also check the duplex setting).
Author: Jamie Scott
Cloning Mac disk using external enclosure and Disk Utility
We got a ssd upgrade for a Mac (JetDrive 885) which comes with an enclosure to allow data to be copied to the new drive. This can be done with Disk Utility – as you are cloning the boot drive you need to run this in recovery mode (boot holding cmd – r). Presumably booting from a usb stick would work as well.
Once in disk utility choose the external drive, select Restore and choose to restore from the Macintosh HD. At this point we ran into an issue:
Could not change the partition type for /dev/disk1s1 - error -5342
We eventually found the problem – the new ssd had been configured with a MBR partition table, not GPT. To fix this go to the View
menu and choose Show All Devices
. Then select the external device at the top level and click erase. This should allow you to choose MBR or GPT partition schemes.
Publishing websites with Jekyll, Apache and SVN
Now I’ve got this working to some extent here are some notes about setting up Jekyll with SVN and Apache:
Server – Debian 9 Stretch, normal command-line only install. Set up system to use email server (campus smarthost in our case).
Install SVN and Apache and set up accordingly.
Install Jekyll:
apt install jekyll
Create an SVN repository for the site files.
Create new project directories at a temporary location, e.g.
jekyll new /tmp/newsite
Commit these files to the SVN repository (I normally check out the repository on my local workstation, copy the directory in /tmp
from the server into the working directory on the workstation, add them and commit). Delete the directory in /tmp
.
On the server, create the actual website file location by exporting from the SVN via a temporary location:
svn export file:///path/to/repository /tmp/buildfiles jekyll build --source /tmp/buildfiles /var/www/sitename rm -Rf /tmp/buildfiles
Configure Apache to serve from /var/www/sitename
. In our case we ultimately wanted to serve multiple sites through a reverse proxy, so we used a vhost serving on an alternate port. This can be a handy testing configuration – you don’t have to worry about fiddling with the other website settings. For example, using port 8081:
<VirtualHost *:8081> ServerAdmin webmaster@localhost DocumentRoot /var/www/sitename </VirtualHost>
(Remember to change ports.conf
to listen on the new port!)
Test by pointing a webserver at server:8081
Once that’s all working, set up the post-commit hook script to automatically build the site on a commit. Our current setup is:
#!/bin/sh # POST-COMMIT HOOK REPOS="$1" REV="$2" REPOS_BASENAME=$(/usr/bin/basename "$REPOS") TMP_SVN_EXPORT="/tmp/$REPOS_BASENAME" # These two need configured! PUBLIC_WWW="/var/www/sitename" BUILD_EMAIL="your.email@this.address" "$REPOS"/hooks/mailer.py commit "$REPOS" $REV "$REPOS"/hooks/mailer.conf LOGVAR=$(/export0/svn_config/jekyll_build.sh "$REPOS" $REV "$TMP_SVN_EXPORT" "$PUBLIC_WWW" 2>&1) echo "$LOGVAR" | /usr/bin/unix2dos | mail -s "$REPOS_BASENAME build $REV" "$BUILD_EMAIL"
(Note that on Debian you need to install the dos2unix
package. Needed as plain text email expects CRLF line terminators as specified in RFC 2822.)
#!/bin/sh REPOS="$1" REV="$2" TMP_SVN_EXPORT="$3" PUBLIC_WWW="$4" /usr/bin/svn export --quiet file:///"$REPOS" "$TMP_SVN_EXPORT" /usr/bin/jekyll build --source "$TMP_SVN_EXPORT" --destination "$PUBLIC_WWW" rm -Rf "$TMP_SVN_EXPORT"
Note that the build process runs under the Apache user account, so set permissions appropriately. Also, when troubleshooting remember that on Debian 9 the Apache process is configured by default to use a private /tmp directory!
This works for our current needs, although it isn’t optimised. Improvements would be:
- Unify the setup for the commit email and build email scripts.
- Build the site in the background (although you’d have to tweak how the logging output works in that case).
Of course, the professionals would use something like a combination of GitLab and Jenkins to automate this stuff properly…
Private /tmp directories in Debian 9 Stretch with Apache
In Debian 9 Stretch Apache is configured to use systemd
‘s PrivateTmp
feature by default. This means that the Apache tmp directory actually lives in /tmp/systemd-private-BIGLONGSTRING--apache2.service-STRING
.
So if you are running an SVN server that uses Apache for serving, anything written to /tmp
in the hook scripts ends up in the private directory rather than the normal userspace one.
Dell Latitude 7490 freezing when unplugging USB3 WD15 dock
Setup – Dell Latitude 7490 running Ubuntu 18.04 Bionic and Dell WD15 USB-C dock.
Problem – system freezes when dock unplugged.
This problem started after updates. The solution found was to revert to the previous kernel (4.15.0-43-generic
) from 4.15.0-44-generic
. Did this by setting GRUB to remember the boot setting – change /etc/grub/grub
with:
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true
and run
update-grub
Then hit esc at the loading screen to get to the grub menu.
Repeated reboot required for pending updates in Windows Update
Note to self – when trying to stop the continued requests for reboots to install pending updates in Windows Update, one of the go-to things to check is the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
Remember, don’t just delete the contents of this key, delete the actual key itself!
Making nis authentication work with Ubuntu 16, Debian 8, Fedora 28 etc.
After updating anything to use systemd-235 NIS logins either don’t work at all (usually for GUI logins), or take a long time to login (console or ssh, sometimes). The culprit is a line in the systemd-logind.service
:
IPAddressDeny=any
This sandboxes the service and doesn’t allow it to talk to the network. Unfortunately this affects nis lookups done via the glibc NSS API. See the links at https://github.com/systemd/systemd/pull/7343
The quick solution is to turn off the sandboxing, either by commenting out or changing the line in systemd-logind.service, or creating a drop-in snippet that overrides it. This can be done by creating a file /etc/systemd/system/systemd-logind.service.d/IPAddress_clear.conf
with the contents:
[Service] IPAddressDeny=
The file can be called anything you like (.conf
).
Then restart things:
systemctl daemon-reload systemctl restart systemd-logind.service
You can check that the drop-in is being loaded with
systemctl status systemd-logind.service
In the output you should see something like:
Loaded: loaded (/lib/systemd/system/systemd-logind.service; static; vendor preset: enabled) Drop-In: /etc/systemd/system/systemd-logind.service.d └─IPAddress_clear.conf
The other test is to see if NIS logins work correctly, of course…
The slightly slower solution is to use nscd
to cache the lookup requests, and apparently does so in a way that plays nicely with the sandboxing. The much slower solution is to switch to using sssd
or similar and ditch NIS once and for all…
Note – this may also affect systemd-udevd
.
Making Debian 9 (Stretch) configure GRUB to boot partitions with UUIDs
As per this bug:
Debian Bug report logs – #852323
The Debian 9 installer (up to v9.5 at least) does not always configure GRUB to find the boot partition using UUID, but leaves it pointing to /dev/sdb
or whatever. This can be a problem if you change disks in the system. In particular, if you install from a USB stick and then remove it when the system reboots after the install this can change the disk /dev
id. The result is a unbootable system. This can be a bit fiddly to fix (although the first thing that’s always worth trying is to reverse the changes you made and see if it boots, e.g. plug the install USB stick back in to the same usb slot).
You can check this by looking at the /boot/grub/grub.cfg
file. A quick check is:
grep "/boot/v" /boot/grub/grub.cfg
The fix is easy. Let the system reboot while leaving the install media in place (obviously make sure you don’t boot from the install media again!). Log in to the system and run (as root/using sudo)
update-grub
Compare the grub.cfg
before and after. Then test by removing the install media and rebooting.
Making nis automounting work in Debian and Ubuntu (and BSD)
We have a problem that with recent versions of Ubuntu (16.04 and later) and Debian (8 and later) the normal way we set up automounting to mount our nis users home directories doesn’t work – apparently due to boot ordering issues. (It works fine with Red Hat derivatives). We accidentally found a solution when copying a BSD configuration…
We create a file in /etc/auto.master.d
(gets read in by auto.master in the standard Debian/Ubuntu setup):
/home auto.astro /data auto.data /scratch auto.scratch
Then in /etc
we have:
#! /bin/sh - if test $# -eq 0; then ypcat -k auto.home | awk '{print $1}' else ypmatch "$1" auto.home fi
and
#! /bin/sh - if test $# -eq 0; then ypcat -k auto.scratch | awk '{print $1}' else ypmatch "$1" auto.scratch fi
etc.
Note these files are shell scripts so need to be executable!
(yes, it’s a bit odd we call the home mapper auto.astro. Historical reasons).
These seem to work reliably on Ubuntu and Debian. This setup actually came from a BSD box.
Making static networking work in Ubuntu 18.04
Ubuntu 18.04 has switched to netplan for configuring the network interfaces. Netplan generates configurations for NetworkManager
or systemd-networkd
and effectively replaces ifupdown
and the /etc/network/interfaces
file.
In an install of Ubuntu Desktop, the default netplan configuration comes from /etc/netplan/01-network-manager-all.yaml
which reads:
network: version: 2 renderer: NetworkManager
This basically hands over all network control to NetworkManager. For a static setup we can change the configuration to:
network: version: 2 renderer: networkd ethernets: enp0s25: dhcp4: no addresses: [aaa.aaa.aaa.aaa/24] gateway4: bbb.bbb.bbb.bbb nameservers: search: [example.co.uk] addresses: [xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy,zzz.zzz.zzz.zzz]
Where enp0s25
is my network interface in this case, the address has a netmask of 255.255.255.0 and the search is the default dns search domain(s) (note this can be vital for getting automounting to work if your setup just uses machine names and assumes the domain is the same).
Note that if you have a laptop you could put this in a file called, say 02_ethernet_interface.yaml
and it should override the first configuration for that interface only. I think. Later configurations override earlier ones.
To test:
netplan try
This applies the configuration and then rolls it back in 120 seconds (by default). Press Enter to accept the new settings.
netplan apply
To apply the changes.
For a desktop I just deleted the first config file.
In theory you could probably use this to generate a configuration for NetworkManager (note that on a server you need to explicitly configure NetworkManager to bring up the interface on boot).