GNU World Order is an internet audio show about GNU, Linux, UNIX, and other technical and geeky topics. We release in the free Ogg Vorbis and Opus audio formats. Please leave your ad blockers on.

Listen: Ogg 12x21 | Opus 12x21


How to reduce the size of bloated PDFs. Use this tip judiciously, as it does lossy compression of PDFs, but it might be useful in some cases. Also, pointless Slackware predictions and another LVM tip.

ogg f228b672d0cd405d0ed04162614b85730bf9512819c88807fc0c5c9576fe06c7
opus f2aa51a4174baf9182a0d7de36b8443fc7fdc4ae31063fdc43c3daf1de0ef5dd
m4a 0d5f819aa8341e06c01a2180187fa9099f7bddc95d549b184957888dace5c86e
spx 8073781e4c7aa8fc24376e411f8a6cde57c50290b4ab789d6ec7a5af12b9f8c5

Listen: Ogg 12x20 | Opus 12x20


F-f-f-Flatpak! an uncomprehensive first impression.

ogg 977490f091d45ef976b1d6b7854ed1bc3bdf1432e8c31e4322778e976f1f33fa
opus 3b32de79fd9462ce2580d1b0a2f966156c12b6695703547b7a257d3278595650
m4a cc950f5652b0860e5871a3e909e2a4a056579981047e67dc6f03cc1d8c77c802
spx f55e4df419325455a4f4196c6b2205bc2a76bd1a593f82b220226487262fe899

Listen: Ogg 12x19 | Opus 12x19


Use LUKS for disk encryption. You can even use it to encrypt thumbdrives. It's easier than you think!

If you're using the whole disk:

# cryptsetup --verify-password -v luksFormat /dev/sdX

Or you can just encrypt a partition. From setup to encrpytion of the second partition of the imaginary /dev/sdX:

    # parted /dev/sdX mklabel gpt
    # parted /dev/sdX mkpart primary 1s 50%
    # parted /dev/sdX mkpart primary 50% 100%
    # cryptsetup --verify-password -v luksFormat /dev/sdX2
ogg f11e5c52e73a4447f9e67ff1ee54825318f5c81e2993f59ecbd0fbb3b370c4bf
opus 8e8eeb101cbcd46ada61f2cf6cc2d1dca209e3e18ec56065465fc5bc0b8cf8cb
m4a 93efc49cad115dfae4fefca13db73edad898c667e1157075c855332523a39212
spx e47b9dad9ae4bd2ab7d9f0a7f04566416b1d4b11df5cdc9252d003ced2dc5128
LUKS gitlab repo

Listen: Ogg 12x18 | Opus 12x18


A tour of LVM. This show covers setting up LVM manually, which can be useful since often LVM is setup magically during installation. Hopefully, this overview will clarify what LVM does, what it's capable of, and how you can interact with it.

Here are the steps I did on this episode:

First, assuming you need to format the imaginary drive /dev/sdX:

# echo "warning, this ERASES everything on this drive."
warning, this ERASES everything on this drive.
# dd if=/dev/zero of=/dev/sdX count=8196
# parted /dev/sdX print | grep Disk
Disk /dev/sdX: 1000GB
# parted /dev/sdX mklabel gpt
# parted /dev/sdX mkpart primary 1s 100%

That was setting up the drive. Your first actual LVM command creates a storage "pool". A pool can consist of one or more drives, and right now it only consists of one, but hey you have to start somewhere.

In this example, I call my storage pool billiards but you can call it anything.

  # vgcreate billiards /dev/sdX1

Now you have a big, nebulous pool of storage space. Time to hand it out. Here I create two "logical volumes" (you can think of them as virtual drives), one called chronicles and the other called gnuworldorder:

  # lvcreate billiards 66G --name chronicles
  # lvcreate billiards 82G --name gnuworldorder

So now I have two "drives" carved out of my storage pool, but neither of them have file systems on them yet. So, create a file system on each.

Before I can do that, I have to bring the volume group billiards online, or "activate" it:

  # vgchange -ay billiards

Now make the file systems:

  # mkfs.ext4 -o Linux -L chronicles /dev/billiards/chronicles
  # mkfs.ext4 -o Linux -L gnuworldorder /dev/billiards/gnuworldorder

Mount these drives more or less as usual:

  # mount /dev/billiards/chronicles /chronicles
  # mount /dev/billiards/gnuworldorder /gwo

You can add space to your pool by formatting another drive and then throwing it into the pool:

  # part /dev/sdY mkpart primary 1s 100%
  # vgextend storage /dev/sdY1
  # lvextend -L +100G /dev/billiards/gnuworldorder
  # lvextend -L +100G /dev/billiards/chronicles

And finally, there are two informative commands to get an overview of your storage infrastructure:

  # vgdisplay
  # lvdisplay
ogg 2a9f63775736f2fd58e97e157f5650643986bd55540194ce2f5b1fc216f999b4
opus 8b889b90d1456cfed156009186fc60468a38dc2c8498b8d43ee370fd42c7b081
m4a 2cd6d4f50f6ccb13e60ab532f955bf1105e6e52df17602010c458881a4847f58
spx 0b7460f089c031dd8d5c01d9b7ca43212e0e54ca73acdfd5137df26d8d970a9d
LVM2 official website
LVM administration

Listen: Ogg 12x17 | Opus 12x17


Klaatu continues his tour of all the little packages that are installed on your Linux box. In this episode: JFS, kbd utils, kmod, less, lha and lrzip compression showdown, libcgroup, libgudev, lilo, logrotate, and LVM.

I'll probably cover this, along with LUKS, in the next episode, but since it was mentioned, here is how I install the OS on a single LVM-enabled drive, and then add more drives with LVM later.

Assuming that you have Linux installed on a drive that is a single LVM volume group, then boot into your OS, and begin:

  1. Partition your un-used hard drive. Assuming you have only two drives in your machine, let's call the first /dev/sdX and the second /dev/sdY (in reality, the values are probably sda and sdb, but to protect you from copy-paste disasters, I use placeholders).

    First, find out how big your disk is:

    # parted /dev/sdY print | grep Disk
  2. For the sake of this example, let's say your drive is 1200100MB (1TB) in size.

    Create a partition that spans the whole drive:

    # parted /dev/sdY mkpart primary 1 1200100
  3. Flag it as an available entity in your storage pool.

    # pvcreate /dev/sdY1
  4. OK, now you have a drive prepped for use, but we should pause and look at our imaginary setup. In order to add this new drive to an LVM volume group, we need to know what volume groups we have. Your OS installer might have created this for you, or it might be something you very consciously designed yourself. Either way, you can see what you have available:

    # vgdisplay
  5. OK, so we have a volume group called storage. Currently, we happen to know that storage contains only your first drive; the one that you installed your OS onto. But you want to make that bigger by adding a second drive to it. This is called extending your volume group.

    # vgextend storage /dev/sdY1
  6. Now we have a pool that has access to two partitions, but we are still not actually using the second partition.

    A volume group contains logical volumes, and it is to those volumes that you can add disk space by drawing from the available disks in the group.

    To check what logical volumes you have:

    # lvdisplay

    To check physical volumes for size:

    # pvdisplay
  7. Armed with a mental map of how your partitions and system are each laid out, you can now extend the logical volume. Let's say that your installer placed /home into its own partition. You would see it as a logical volume, and you can extend its size:

    # lvextend -L +999G /dev/storage/home

    That would, as you can probably guess from the command itself, extend the logical volume containing your home folders by 999Gb.

  8. Well, almost anyway. It has extended the space available to the logical volume, but it has not actually stretched the file system across all that new space yet.

    To make all that extra space readable and writable, you must resize it:

    # resize2fs /dev/storage/home

    Verify what you have just done:

    # df -h /home

Your home directory is now nearly 2TB in size, and the fact that the file system spans two separate physical volumes is entirely transparent to the OS.

ogg 27e164d61163394c5db669002b14237a87a58f8dfbe01e5b8dfcbc36f265a341
opus ed673226da0c80134bcf2b6f49530074fc23ff4dd367ec7d25774461e4d86a98
m4a 78fa2d887ac73c6c04a40f20af31460d08d023da100894d164532597a6fcb8d5
spx f904bd380765ea5eaad129c763a33016f0af19f707f402c7a968dc90159a020a

Listen: Ogg 12x16 | Opus 12x16


Why should you use open source for your next project? Klaatu tells all!

ogg 1d6fcae49e3e47803f48d1ee51db945d1e5960190fa40066d1f115437b8c4a83
opus c5c7dddeda193c58516c514149b68ae31a19b32658c3573319ee6894db938541
m4a dc1f9a49ca732105e3625cb8500a3bd237414bdc1c145061c0655d66467d20fe
spx 6b2329d1de58f3f7b799c8bc8f4c9fb257d742a5c60768fe262470ad9a164baa
Free Software Foundation

Listen: Ogg 12x15 | Opus 12x15


Listener feedback.

ogg 1d61524f85971444c75320767e09692ac278242e7aade8a9e5be4543ea6ea419
opus 4e6c934b69d0db7da2b51017b6dd9d70ce3474e6e40902165029486aaf14f99c
m4a 9a78091bd183446436c8ced6016e4e563558a5a428d00723311ee9e4b3a90c4f
spx 1f4c9d0c95a4694de86135fd04a8e247a7b668dc22a98b889d8f056bb4307c0f
Parallel video tutorials

Listen: Ogg 12x14 | Opus 12x14


Klaatu installs NetBSD on a Raspberry Pi rev 1. Klaatu attempts to kill its FFS file system LIVE ON AIR. Long story short: you should go install NetBSD on a Pi.

ogg 6d4b01d5609a6b22e1f5f3fc0922db2f351b5afc74860c7d78cd9c752a56cf19
opus f7b6454e9f11dcb8a169b3e13cfde4e0a91b05731ab82a1b1ccb875c5f8ac9b1
m4a 676ce7a4dcb4244b62ae4da0d6a121734de8f4a12801fedeb2276de816740c67
spx 15c7c108c392ed36a5308d4faedc41c3e7511a865147bd61d37b8fd0ea4473e7
Raspberry Pi page on
Journaling Versus Soft Updates: Asynchronous Meta-data Protection in File Systems

Listen: Ogg 12x13 | Opus 12x13


Learn how to use Slackware tag files to customize a Slackware install, plus the secret of how to perform a Slackware install in less than half a gigabyte.

ogg b0ec5f9b9f526f014ebc4c955e5da0edf4e96be1e19715165f9ef91ab43a87c5
opus 3bf9392a3588eba39f246824c27008cdf4de4df4abe5f73a87a158bfcf32079f
m4a 4bc268aebb5c954eaa1c2f74534f765c32e603585b5f4e13068532058048ba38
spx 2faa5a43d261f27798c108522c219e60335ad090fdc7301a556617c46768a810
Outdated but useful: minimal Slackware install

Listen: Ogg 12x12 | Opus 12x12


Exploration of the Slackware install set continues with inotify, some install scripts, ISA plug-and-play, jfsutils, kbd, kernel packages, with a few detours into the world of gzip redirection, some stuff about grep, and a howto on compiling the Linux kernel.

ogg e1ce088d19e7318c29745a954eff2b509c44db44fa3ca5406d1dae4fde41a6a0
opus efe2d643f7a7d854be5d30162e3e23b0fb31d9f95fc953322e297d23d84230ba
m4a 42567f78abdc4122984c46e0e173a882200978d3473a32f743516c0522c15d94
spx 65963bd87271b49a31a00e105c196326b4d382bf96c282087453ed3f61fa3d84
Slackware package list

Listen: Ogg 12x11 | Opus 12x11


Klaatu gushes over Porteus, the portable Slackware distribution.

ogg 951dbd39a435001fd1818acadac123444ad9fc370ecbfcae15d6a7b88f895374
opus f93f7fd4c53d02714b48343882124e66f444aa0ab57c7bedbbc57a57cbf7c9bf
m4a 35a68a194e65338248ab5914e47fca24f9def3a382ed5158252d519993c15569
spx 245f8241c6be33ce663b7edc5985394153ec3375d07fc3afc31919784390dcf5
Live Slackware from Alien Bob

Listen: Ogg 12x10 | Opus 12x10


Klaatu tries pkgsrc on Slackware, and you won't believe what happens next. But to sum it up: it's super easy to implement, easy to use, and pretty nifty.

To get pkgsrc on your Linux OS:


  $ wget

Extract it to /usr:

  # su -
  # tar --extract --verbose --file pkgsrc.tar.gz -C /usr

Bootstrap pkgsrc:

  # cd /usr/pkgsrc/
  # ./bootstrap

Adjust paths:

  # echo "PATH=$PATH:/usr/pkg/bin:/usr/pkg/sbin" >> ~/.bashrc
  # echo "export $PATH" >> ~/.bashrc  
  # echo "MANPATH=$MANPATH:/usr/pkg/man" >> ~/.bashrc
  # echo "export $MANPATH" >> ~/.bashrc

Build something:

  # cd /usr/pkgsrc/foo/bar
  # make install
ogg d33c41ab7665166611763ff41ca50550fb523d79ac9326b56aae56f03e2c2a98
opus eff6e9e57a56e5a8a056d0b5536e8220aeb41a58600f4d42eea06954e9091365
m4a dc3511676ecf2b66e0796e3f2f3784ce56f07dc5c1178faf3d3959660f797504
spx 7a7b37a46d18ca484e2bb5db05342a20a2c1aa136e81c8255fd5b303abbce6fd

Listen: Ogg 12x9 | Opus 12x9


A bunch of listener feedback. Hear about old time sci fi internet shows, runtimes, and much much more, not the least of which is an open source audio converter powered by LibreOffice spreadsheet.

ogg f7bb79ddb88065a8995aea87ef3f87d1f8293e206f871e77dae3dfe996b1d44e
opus 2e4a43d1df02ec77e5c2c12d265bfb9c89d1f79482000810c4373d8bd63ba53a
m4a edb0491f78fbcdcecfa1d645db5d900e82aef4c793065ea344ab4055ced95389
spx f042f2850f5144f9fcac29d72b4de6640169bb86c432cf9071a6167735ba4f6e
Claybourne, a Kiwi SF radio drama from the 90s
GNU docs on CHM, worth reading for the dedication alone
Sheety Audio Converter by Doru
Resolving HDR with spreadsheets by Kevin Chen

Listen: Ogg 12x8 | Opus 12x8


We hope you find this episode useful.

Here are Ken Fallon's shownotes:

A good alternative to ls:

find -ls

Find this, and then do that:

find -type f -iname "*txt" -exec grep cows {} \;

Identify symlinks when I need to redirect stuff from one data store to another:

find -type l

Useful for listing just directories, and getting around the annoying habit of ls *, which returns the files in sub dirs.

find -maxdepth 1 -type d

The prune option can exclude results:

find . -iname "*.wav" -type f -o -prune "./foo"

Identify empty files:

$ find -empty

$ find -empty | xargs --max-args 1 trashy

As a cron job to remove old log files

0 23 * * * find /var/log -iname "~*" -o -iname "*log*" -mtime +30 -exec
trashy {} \; > /tmp/removing-old-logs.txt 2>&1

The mtime option allows you to limit a search to files older than, but also files newer than, some value * 24. It's great for when you bring up a new service that's logging something but you don't know where.

For bash scripts, I use this format a lot:

for foo in $( find /var/tmp/ -type f -name "");do echo $foo;done

or like this

find /var/tmp/ -type f -name "" | while read foo;do echo $foo;done

It's amazing how often I run this

find -type f -iname "*.something" -exec ls --full-time {} \;

or this

find -type f -iname "*.something" -exec grep something {} \;

Usually I throw in the -maxdepth option to limit the search depth.

Use the ipath or iwholepath to scrub a path for a string.

find -ipath "*something*"

Then there's this type of construct for tools like ffmpeg and xmlstarlet that don't love wildcards from for loops.

find -type f -iname "*.xml"| while read i;do xmlstarlet sel -T -t -m
'rss/channel/item/enclosure' -v '@url' -n "${i}";done

Then there's the awkward way it handles multiple options:

find \( -ipath "*foo*" -o -ipath "*bar*" \) -exec rm -v {} \;

Note: locate and updatedb use find in the background.

ogg 214eb2263e77756db83e8de06707140d69f59f8509969cd1496e62c4a9f0b565
opus 926aa00e84291ee63cec104d63c4b50aeda9ddd0051dd8390b736c172ca41cc2
m4a d32bf729beecb964cb8503b99a405256f3ecf446fd7f3f4debe0f4610a8339ed
spx 3455e9da8dc9ab89ed7250a03e0a05597e7b615b94262fe6f916f87d6165994e
GNU findutils
GNU findutils user manual

Listen: Ogg 12x7 | Opus 12x7


Klaatu, whilst stranded in a hotel somewhere in middle America after a delayed flight, reviews his new InkBook Classic 2 ebook reader, which has replaced his broken Kobo n905.

ogg 91c0d0d74e6b8627d39bf08d5a413afca3027ee5e0cd4376a69197769eae9f91
opus c9a76591f76c4c1bcec2b3ab27bb9200f91a10a3d8594dc8ec291cdbe503b02d
m4a bfa632431d079143a1e3cd174ec26c5e26db7cbf8736b05aa775d80f15c0d6a0
spx 9761c843563583d580ae1efaf4c3d00aa5596eaa03c34738a57f92102fc09912
Android open source

Listen: Ogg 12x6 | Opus 12x6


Klaatu expounds upon xargs and talks GNU parallel. Also, a bit about the concept of runtimes.

Here is a recent real-world benchmark comparing parallel to xargs:

$ time find . -type f -name "*.wav" | xargs -I% --max-args 1 sox % %.flac

real    1m5.364s                                                                        
user    1m3.907s                                                                      
sys     0m1.424s

$ time find . -type f -name "*.wav" | parallel -I% --max-args 1 sox % %.flac

real    0m22.743s
user    1m21.780s
sys     0m1.400s

ogg 83bde56b08fb15cf7e554491b4e9df6e46efc04102e3afb5555852d6349679ff
opus f8c46c403f504773c8e7a64f5e2704bcaa3a554f1d3edf721513df5ae39ee52a
m4a 9619b9e2127e1b65e278689d0c7ed36ca7ef075cd6b8e1d5f30de765b507f88a
spx e15a070c75ff9ac30de5fd1c0d5a62aa3f29c3d599146739568c65bbe31a3671
GNU Parallel
Dark oCCult build script using GNU parallel

Listen: Ogg 12x5 | Opus 12x5


All about the GNU xargs command.

ogg 2befbf2c6eb24428db2acbe7b007020e4bdafd4b7f1b98578f16a67f52d72474
opus 5580e2b1117144b058211b6ce80530cb75b7bc4d49745a0aa4e969fdd677cfd2
m4a d07d8e3df085cd0707cb50bcad7a0a2e84d54d96926ba4bf4c69366441cbcc45
spx d81696b9a1a30445ff4c202890528fe225fc146c0395a85ee9765111b0a16bdb
GNU findutils

Listen: Ogg 12x4 | Opus 12x4


A bonus episode this week. Klaatu talks about getty, agetty, inittab, gawk, and more.

ogg 17356498562df4a04957c1dc6f02107f26152eace77c870246cf2b5efdace891
opus b7368c425abbe8197f4f26df4659392e16270754f9256d6fbeef7d4f5eb21853
m4a c1bdb98b86ede5b44ac2d012a8f6fe1833da6124b7af7cd79bff80637b5734bb
spx 8e6cda517a81167279020fb2270c6821c692ca91a9b74646a69e41eacd141789
History of BeOS
Haiku is an open source BeOS

Listen: Ogg 12x3 | Opus 12x3


Klaatu talks about BeOS, Haiku, elvis, e2label, mlabel, and much more. Either next week or the week after, let's do an episode on find. Send Klaatu your cool find hacks!

ogg 6d85516bd7276a97e49d00b127e4d292181943dc498a6575c7ff99b17a887360
opus aedd88aebfabec05f929bc2dde170b69f608cbff1ecb2c895555514a19d92583
m4a 6aa537ac0950bf48556396cc95d1823bd55e2803e3e11225845d0de9437dc14f
spx 5ccae4b3c0261c621829b0be49422d5971d9af2b4c6457ab67c31d611196630a
History of BeOS
Haiku is an open source BeOS

Listen:o Ogg 12x2 | Opus 12x2


Klaatu introduces his podwrite tool, his custom toolkit for publishing this show and his Chronicles & Commons show.

ogg 062f6eda50a5c9d3177bc7725ca5fd21d9b6043e0a2dd6eac43cf03837d6a5d3
opus 2ca99f7280a7cfeb785009cd37947adaa098161c727fd3534b2401d8b9598c75
m4a d8b7c8bb8e8ab9a1a6fda60d049473fb1cf493498da9a51b362a812b53f1d620
spx e73db40f6992fe9e64cf175c0f9b734804ce01e499c2633428c927c5aa1f153a
Podwrite on Gitlab
Podwrite documentation
The excellent Wordpress plugin, Podpress, is easier but harder to automate

Listen: Ogg 12x1 | Opus 12x1


Klaatu continues his tour of the low level Linux filesystem, covering exciting commands like attr, the GNU coreutils, infocmp, and more.

shasum -a256:
ogg dd7e999b1e9eebf835ab0a18a7f70850422fbf610cf033d640bd219c5ad77491
opus fedc55bd11e6c780710d36dadcc3dae2bd40af3d0633c5690d2efa44157fe3e6
m4a d55b2da937801664fc2258cb1e38a965446587092df895b5485703200af55e25
Linux from Scratch

Listen: Ogg 12x0 | Opus 12x0


Linux user, know thyself. It's a new year and a new season, and the GNU World Order is now officially an Ogg Vorbis and Opus cast. Although there is no speex feed now, there is no need to update your feed. The old speex feeds are symlinked to the new Opus feed.

In this episode, Klaatu takes a look at all those little files that get installed when you install Linux, like libgmp, libglib, libgobject, libpanel, libusb, and many many more.

shasum -a256:
ogg 5468697f0d58ba413a5038196b41efb8a319e5e66f726ab62468993f67b1ac17
opus 38a71ad2fe11728cdf83d00aff69f3a52904cd1b9b0b5a1a191f776e15b3bf8d
Slackware package set a