Comments None

whoo. lots of big, big things.

New packages

The following packages have been added to AUR:

  • aif/aif-git
  • mtree-git
  • python-pylibacl
  • python-steamodd/python-steamodd-git

Updated packages

The following packages have had updates pushed to the AUR:

  • bdisk/bdisk-git
  • dumpet
  • python2-dpkt

New projects

The following projects are new:


AIF, or Arch Installation Framework, Next Generation, is meant to replace the dead AIF. It’s essentially kickstart (or preseed) for Arch Linux. you can find out more on the site. there’s wayyyy too much to go into here. i have made announcements on the arch-general mailing list and the community contributions sub-forum on Arch Linux forum.

Updated projects

The following projects have been updated:


  • fixed a bug with GPG signing with a specified key
  • fixed some minor bugs in the doc
  • cleaned up some layout, made the defaults more friendly
  • fixed hostname so it’s now templated using bdisk:uxname
  • fixed a bug with bitness being specified in:
    • the http sync
    • the isolinux configuration
  • changed mtree to mtree-git in the default package set (bug #10)
  • fixed a bug for syncing in the case of missing files

Categories AUR, Linux

Comments None


Tagged release

  • updated to 3.03-BETA with some additions/improvements from other users’ testing

Git branch

  • incorporated above fixes, and no longer build from most recent tag- instead, i build from origin/master’s HEAD


i finally got a working nquakesv build together. it’s not as clean as i’d like, but it seems to work at least.


  • incorporated some imrpovements requested on the AUR comments


I added Q2Pro to the AUR. Note that the -git package currently (despite common sense) seems to work a LOT better than the tagged release package.


  • I switched upstream to a (slightly more recent) fork.

Categories AUR, Linux

Comments None

So playonlinux is SUPER useful. very useful- they apply a lot of handy fixes for well-known programs that would normally run in wine.

Now, Steam has had a native GNU/Linux port for a while. But that’s not what I’m writing about. I’m writing about installing Steam in PlayonLinux so you can play Windows-only games in Steam.

Intrigued? Yeah, there’s already an article

But that’s beside the point.

In Arch, you may get an issue when trying to do the install in Steam- namely, that what SHOULD be the Steam installer window only seems to be a 1×15? or so pixel window- you can’t resize it, fullscreen it, anything. Changing your display resolution doesn’t help, switching DE’s doesn’t help, changing theme doesn’t work. What the heck?

It’s because of an outdated libz library shipped with PoL’s installation process.

Easy fix. First, close any PoL instances and all other PoL-related windows, then find ~/.PlayOnLinux/ -type f -iname "libz*" -delete

That’s it!

Thanks/credit goes to this forum post

Categories Linux

Comments None

Do you find yourself reading a TON of RFCs? I definitely do.

I wrote a tool purely in python 3 that will let you either download all RFCs published, download a specific RFC, OR – and this is the handy thing – view it right in your terminal. No more futzing with lynx or alt-tabbing to a browser.

EDIT: So apparently, and I wish I knew of this beforehand, but there is already a (python-driven) tool for this! It is quite a fair bit more heavy, though it does support more features. It’s simply called ietf and I have packed it in the AUR as ietf-cli. I may include RFCtool as well, simply because it’s better for cron and more lightweight, or I may package it separately.


RFCtool has two modes of invocation: Download(d) or Print/Pager(p).

Each mode has its own separate help, too.

In other words, assuming you copied the script as, you can get usage-specific help for downloading via d -h, whereas you can get help for the printing/paging function with p -h.

The code

#!/usr/bin/env python3

import os
import argparse
import textwrap
import tarfile
import io
import re
import pydoc
from urllib.request import urlopen

# TODO: non-txt format support? (i.e. PDF, HTML, etc.)

def downloadRFC(destdir, rfcnum):
    rfcnum = (str(rfcnum)).lower()  # In case argparse interprets it as an int or it's entered in uppercase
    # For when we implement format support:
    # "plain" = raw text
    # "html" = html text
    # "pdf" = pdf text
    # "x-gzip" is for a gzipped presumably tarball, but we use the "all" keyword for this.
    filetypes = ['plain', 'html', 'pdf', 'x-gzip']
    filext = {}
    for t in filetypes:
        filext[t] = t
    filext['plain'] = 'txt'
    filext['x-gzip'] = 'txt'
    if rfcnum == 'all':
        rfcuri = ''
        rfctype = 'tar'
        filetype = 'x-gzip'
        rfcuri = '{0}.txt'.format(rfcnum)
        rfctype = 'plain'  # We'll make use of this later.
        filetype = 'plain'
    rfcdir = '{0}/{1}'.format(destdir, filext[filetype])
    os.makedirs(rfcdir, exist_ok = True)
    # And some minor fixes. We don't need .txt extension for plaintype. Remove if someone complains.
    if filetype == 'plain':
        rfcpath = '{0}/{1}'.format(rfcdir, rfcnum)
    elif filetype == 'x-gzip':
        # We need to handle this a special way, since it's a gzipped tarball.
       rfcpath = rfcdir
        rfcpath = '{0}/{1}.{2}'.format(rfcdir, rfcnum, filext[filetype])
    with urlopen(rfcuri) as rfc:
        # Is this a single RFC, a release tarball, etc.
        # Commented out for now until we implement multi-format support, as we have the 'all' keyword to help us.
        #rfctype =
        # Handle the tarball here.
        if filetype == 'x-gzip':
            content = io.BytesIO(
            tarball = = content)
            for i in tarball.getnames():
                filedest = '{0}/{1}'.format(rfcpath, re.sub('^rfc([0-9]+)\.txt$', '\g<1>', i))
                if re.match('^rfc[0-9]+\.txt$', i):
                    with tarball.extractfile(i) as e:
                        with open(filedest, 'wb') as f:
        # We don't need to extract from the tarball, so we can just handle it as a plain read.
            content =
            with open(rfcpath, 'wb') as f:

def pageRFC(rfcnum):
    rfcnum = (str(rfcnum)).lower()  # In case argparse interprets it as an int or it's entered in uppercase
    with urlopen('{0}.txt'.format(rfcnum)) as rfc:

def parseArgs():
    args = argparse.ArgumentParser(description = 'RFC Downloader/Viewer',
                                    epilog = 'TIP: this program has context-specific help. e.g. try "%(prog)s d -h"\n')
    subparsers = args.add_subparsers(help = 'Operation to perform', dest = 'operation')
    downloadargs = subparsers.add_parser('d', help = 'Download an RFC/RFCs.')
    pagerargs = subparsers.add_parser('p', help = 'Print the RFC to the terminal.')  # TODO: add -b/--browser? redirect to lynx for html paging?
                        dest = 'destdir',
                        metavar = 'DESTINATION',
                        default = '/usr/local/share/doc/rfc',
                        help = 'The destination directory to save the RFC to. Will be created if it doesn\'t exist (assuming we have permissions). The default is /usr/local/share/doc/rfc/.')
    downloadargs.add_argument(dest = 'rfcnum',
                        metavar = 'RFC',
                        default = 'all',
                        help = 'The RFC number. If the special value "all" is used, then ALL of the published RFCs will be fetched.')
    pagerargs.add_argument(dest = 'rfcnum',
                        metavar = 'RFC',
                        help = 'The RFC number.')

def main():
    argsin = parseArgs()
    args = argsin.parse_args()
    if args.operation == 'd':
        downloadRFC(args.destdir, args.rfcnum)
    elif args.operation == 'p':

if __name__ == '__main__':

As you can see, there are a couple TODOs- mostly feature requests (downloading in PDF or HTML format, or paging to lynx instead for easier browsing). But for now, it’s pretty freaking solid and useful, I’d say.

Categories Python, SysAdmin

← Older Newer →