site  contact  subhomenews

Nheko Matrix chat client

July 18, 2018 — BarryK

Purism are using Matrix for chat forums, including for the Librem 5 phone:

So, decided to give it a go. There are various Matrix client apps, and I compiled Qt5-based Nheko:

The PET for EasyOS 0.9.5+ (not yet released) is here:

Dependencies are 'olm', 'libsodium', 'liblmdb', which are also PETs. Also 'boost' version 1.66, which is in the upcoming Easy 0.9.5.

Nheko, at startup, offered to register, where a username, password, and "Home Server" can be entered. For the latter, I entered "", and a captcha came up in the browser to verify that I am a human.

After starting Nheko, I was in my own "room", "@<myusername>", but unable to change out of it. Nheko is lacking some features, but is under rapid development.

I logged in at the online browser Matrix client:

Logged in, I was able to ratify a user-agreement, that then allowed changing rooms. I was also able to personalize my account, with email and avatar, which cannot be done in Nheko.

Started up Nheko, logged in, then hit the "+" icon and was able to change rooms. Chose "", and yay, there it is!

Hmmm, perhaps it is easier just to use the online client.

Tags: linux, easy, quirky

How to give super-powers to zeus

June 20, 2018 — BarryK

This is very interesting! I have a user named 'zeus', your normal underprivileged user. How can I give zeus admin-privileges, without actually becoming root -- because, that is what 'sudo' does, can bump up to 'root' to perform admin operations.

I want to perform some admin operations, while still being zeus. Never mind why I want to do this, I just do.

The 'capsh' utility, in the 'libcap' package, can do it. I wrote about "Linux capabilities" recently:

...however, I am not interested in the cap_sys_mount patch anymore.

Puppy Linux and derivatives such as Easy and Quirky, run as 'root', with the ability to run Internet applications as user 'spot', and in Easy in containers with unprivileged-root -- the latter is achieved by using 'capsh' to drop privileges when chroot into a container.

Anyway, running as root, it would seem that capsh could be used to switch to a normal user, yet keep any privileges that we want to keep. In Easy, there is a user named 'zeus', that I created especially for this experiment.

I thought that capsh would work (using "--secbits"), however, it didn't. I am using libcap version 2.25, which the original author stopped work on some years ago. I discovered that some further work has been done on libcap, to add that missing/broken feature:

...thanks Andrew!

I modified the source slightly, copied from the kernel source /usr/src/linux-4.14.44/include/uapi/linux/capability.h, prctl.h, and securebits.h, to libcap-2.25/libcap/include/uapi/linux/, and changed the "DYNAMIC..." line in Make.Rules to this:

DYNAMIC := $(shell echo yes) as to get dynamically liked executables.

Then just ran the usual:

# make
# new2dir make install

Running "capsh --print" prints out all of the capabilities. Now, if I want to change to user zeus and keep all of those capabilities:

# capsh --keep=1 --user='zeus' --inh='cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read' --addamb='cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read' --
# whoami
# rm -f NewFile1

'NewFile1' was owned by root, and a user would not be able to delete it, which I checked was the case when I just did a normal "su zeus". Yippee, zeus has super-powers!

Note, the order is important:

capsh --keep=1 --user='zeus' --inh='...' --addamb='...' -- 

The "--" causes bash to run, so you have a new shell, and get back to root by typing "exit".

Tags: easy, linux, quirky

Devuan package repositories

June 17, 2018 — BarryK

I mystery. I am getting woofQ setup for building from Devuan DEB packages. There used to be a 'merged' directory, which I think had all of the specially-modified non-systemd DEBs, plus everything else from the Debian repo.

However, looking in the Devuan repo for the latest release, Ascii (2.0), which is based upon Debian Stretch (9.0), the 'merged' path is, well, not merged.

It seems that we have to get the Devuan-modified DEBs from the Devuan repo, and the rest from the Debian repo.

Here is a mirror of the Devuan repo:

...look in folder 'a', no 'abiword' (for example).

To get abiword, we have to go to the Debian repo, for example here, look in 'a':

Some guys have been creating Devuan-based Puppies.  Forum member musher0 did a Jessie-based Devuan:

Forum member Sailor Enceladus did a Ascii-based Devuan:

...which I have just downloaded, to see how he tackled the DEB repository problem.

The light has come on. The package database at merged/dists/ascii/binary-amd64/Packages.xz has everything, the Devuan and the Debian DEBs. In the field that has the path to the DEB, there is "pool/DEVUAN/..." or "pool/DEBIAN/...", and the online repository at merged/pool/main has a server rewrite rule, that redirects to wherever the DEB actual is.

Tags: linux

PureOS 8.0 Linux distribution

June 13, 2018 — BarryK

As I have ordered the Librem 5 phone dev-kit, which will have a PureOS-based distribution on it, I thought that probably the upcoming docs might assume a host development PC to be running their x86_64 PureOS, so I installed it. Downloaded from here:

Burnt it to a DVD, booted and the menu offered "Test or Install", which booted up running in RAM. Clicking top-left, some icons dropdown, and I chose "install", which runs the "PureOS Installer".

It is quite a nice installer. I was able to chose one partition that had nothing in it (sda5), and not to install a boot manager (as I already have ReFind, that I will edit manually). I took the precaution of unplugging one of the hard drives, my main work drive.

It installed OK, except changed some of the drive partition numbering, which was odd. Even odder, it changed the labels on all of the partitions -- unexpected and not nice!

Also, it changed the hardware clock to UTC, whereas I have it set to localtime. I hate it when an installer does that. It is saying, to hell with the other OSs, this is how it is going to be! There was nowhere after bootup to choose UTC or localtime for the hardware clock. Later, I booted Easy and changed the hardware clock back to localtime. Then rebooting PureOS, it was still correct time, as it was reading it from the Internet.

The file manager is the usual awful Gnome thing, so dumbed down.

One more thing: at first bootup it asked for a new password, and there was a checkbox to bootup without password -- except it doesn't work, requires a password.

Using PureOS was OK, just a matter of getting familiar with where everything is, but whenever I test a Linux distro, I always feel relieved when I get back to Easy/Quirky/Puppy.

Here is the PureOS website:

Back in mid-2016, I compared the Ubuntu and Debian installers:

Tags: linux

Aboriginal Linux 1.2.0.x resuscitated

March 09, 2018 — BarryK

Over the years, developing Puppy and derivatives, I have had a need to compile some utilities statically.

It has been ad-hoc, using different uClibc and Musl filesystems. Now, I am making it more formal, and reproducable and useable by anyone.

Rob Landley's Aboriginal Linux is an archived project. I am bring it back, specifically the uClibc based version.

Introduction is here:

Download (228MB):

And what to do after downloading:

if anyone is interested, you are welcome to play!

Forum feedback:

Have fun!

Tags: linux

Finally, success with OpenADK

March 06, 2018 — BarryK

I wanted the 'dmsetup' utility compiled statically, for use in initramfs. This is in the LVM2 package. It turned out to be a saga of many many hours...

Unfortunately, both OpenEmbedded and Landley Aboriginal dropped support for uClibc, going over to musl. What is really odd, is the developers on both of these projects gave the same reason, that uClibc is a dead project. That is very odd, as uClibc-ng is very active. Were they ignorant of the existence of uClib-ng? -- incredible if so.

Anyway, musl. have used it many time, just don't like it. uClibc is far more glibc-compatible, and hence far easier to compile source packages.

I did attempt to compile 'dmsetup' in an Alpine Linux x86_64 musl rootfs, but finally used Landley's Aboriginal x86_64 uClibc rootfs, version 1.2.0 -- very old, but it works great. year 2012 in fact.

However, uClibc does not have the fmemopen() function, so I had to compile an older LVM2 that does not require that function -- version 2.02.119. Success, compiled it statically, about 500KB stripped.


I ruminated on what other rootfs's and toolchains there are out there, that will have a recent version of uClibc. One of them is OpenADK, that I have tried a few times over the years, always failed, see these reports:

Decided to have another go!

Downloaded the latest snapshot, ran "make menuconfig" and then "make", hit some failures, fixed them, but finally gcc compile failed with "unable to determine size of (long long)".

Scratched my head for sometime over that, but then it occurred to me that my host system might not support "long long". That does not seem to good, but anyway. My host is EasyOS Pyro64, the packages were compiled in OpenEmbedded, targeting embedded systems, and perhaps this is one compromise.

So, went over to Quirky Xerus64 8.5, which is built with Ubuntu 16.04.4 DEBs. This time success:

# make distclean
copy DOTconfig to .config
# make menuconfig
# make
copy /usr/bin/autom4te to openadk/host_x86_64-oe-linux/usr/bin/
# make you can see above, a couple of little tricks were required, the "export FORCE_UNSAFE_CONFIGURE=1", and coreutils wanted a "autom4te" file.

It finished, and built a toolchain. Now I need to study the docs, see how to compile packages, and built a development rootfs.

Tags: linux

Easy network printing with CUPS

January 12, 2018 — BarryK

I have been trying all day to setup printing over a small network, just two PCs running Easy 0.6.6, connected to an ethernet router (and to the Internet via wi-fi wan, to my mobile phone hotspot).

One PC, my "midi-tower", has a Brother HL-2040 laser printer connected via USB port. Local printing works fine. The other PC is my Mele "mini-pc", and I want to be able to print from it.

The problem is, I cannot get the "ipp" protocol to work. I have studied online documentation, and can get the client machine, my mini-pc, to see the remote printer, however when do an actual print, get the dreaded "Filter failed".

As stated, I have messed around all day, trying different things. Then, I found something that "just works", very simple. I would like to acknowledge "paulkerry" for this info:

Just a comment: there is a lot of outdated, vague, ambiguous and misleading documentation about CUPS online. For example, one "very official" site explained the format of the ipp protocol as:


...without explaining that only "hostname" and "printername" must be substituted, and the text "printers" must be left as-is. There wasn't even an example, nor was it properly explained how to find the printername.

Anyway, I did learn how to specify ipp properly, but got stuck at "Filter failed".

The method described by paulkerry works, so here is a little tutorial to explain how to set it up. Note, I plan to semi-automate this, by extending QuickSamba, which I plan to rename to EasyShare. Anyway, the tut...

1: Firewall

I ran the firewall setup on both client (my mini-pc) and server (my midi-tower) PCs, so that the CUPS port (631) is enabled. In this snapshot, I have also enabled Samba ports, but that isn't necessary for just printing with CUPS:


On the server-PC, just setup the local printer as you normally would, but tick some extra boxes...

2: Server PC

You need to have the cupsd daemon running and point the web browser at http://localhost:631. In Puppy/Quirky/Easy, you do this by running the "CUPS Printer Wizard":


A window will popup asking if you want to add a new printer, and you click "Yes", then you will get the CUPS web interface:

image on "Adding Printers and Classes", then the next window:

images each of those, 1, 2, 3 and 4. Do not miss "Change Settings". Probably "Allow remote administration" is optional, but I enabled it, as I was then able to bring up the CUPS web interface of the server-PC on my client-PC. Next window...

...well, anyone who has setup a local printer will be familiar with this. Continuing, as per usual, except an important checkbox to tick...

...the first two boxes are pre-filled. It is not essential, but useful, to fill "Location". And, you must tick "Share This Printer".

In the next window, you choose a driver...


And set some printer options...


That's it, the server-PC is setup. Before setting up the client, you will need to know the IP-address of the server. A few ways of doing that. Open a terminal and type "ifconfig", and you will see it -- in my case it is "":


In Puppy/Easy/Quirky, there is no need to edit the /etc/cups/cupsd.conf main configuration file, as it is pre-configured OK. Note, for this tutorial, I am running pristine EasyOS Pyro64 version 0.6.6.

Now for the client-PC...

3: Client PC

Over on my Mele mini-pc, setup is easy-peasy. I created file /etc/cups/client.conf...


...with content just one line, "ServerName <ip address of server>"

Finally, restart the cupsd daemon...


...and run "lpstat -t" to verify that the remote printer is found.

That's it, nothing more to do. If you ran an application and choose "Print...", the remote printer will be offered, in my case, my Brother HL-2040.

Also, the CUPS web interface of the server can be accessed from the client, by going to "" in the client web browser.

As stated, I have thoughts how this setup can be semi-automated, including automatic creation and update (if the ip-address changes) of /etc/cups/client.conf. Stay tuned.

Tags: linux, easy, quirky

Fatdog64 720-final released

December 21, 2017 — BarryK

Fatdog is a fork of Puppy Linux, and I have always found it exciting to watch its progression. Reason, there are often very clever innovations. The developers are 'kirk' and 'jamesbond', and more recently 'fatdog', 'sfr', 'step' and others.

Fatdog forked from Puppy Linux many years go, using the Unleashed build system, before Puppy went over to the Woof build system. Here is a Puppy family-tree: doesn't actually show dates, but Fatdog forked from Puppy 4.0, I forget how many years ago that was. The developers took Unleashed off in a new direction, and more recently they are able to build the packages of Fatdog from source, see forum post:

They did use Woof, before branching entirely to their own build system, with complete compile-from-source, see timeline:

Development is still happening very intensely, and version 720 of Fatdog64 has just been released, see announcement on the Puppy Forum:


Here is the Fatdog homepage:

I will also download it, to examine some of the things listed in the release notes -- with our puplets, we cross-pollinate, and I will likely find some new ideas for Easy and Quirky.

Tags: linux