AppStream Error in Ubuntu 16.04 Xenial

I’d been seeing this error recently:

AppStream cache update completed, but some metadata was ignored due to errors.

According to a Q&A on AskUbuntu, this is the result of a bug in the app stream package.

The package has as of 24 December is not yet in the package updates for 16.04; therefore, to fix it one either needs to add it from the proposed repository or from the backports repository.

Once you’ve enabled the backports repository (which you may not have to do at all) you can specifically pull the package from backports with this command:

sudo apt install appstream/xenial-backports

Now instead of the default version 0.9.4, you should have the updated version (0.10.1 of this writing):

appstreamcli —version
AppStream CLI tool version: 0.10.1

To complete the process, you need to update the cache data:

sudo appstreamcli refresh —force

Then make sure to do an update and upgrade to get any missed updates:

sudo apt-get update
sudo apt-get upgrade

And clean up the last of the update by removing the now unneeded libappstream3:

sudo apt-get autoremove

This should fix the problem once and for all.

Apt-Cacher on Ubuntu Trusty

I have been upgrading a data center server from Lucid Lynx to Ubuntu Trusty, and have been working with the new Icinga, Puppet, and other tools.

One nice change was switching from apt-proxy to apt-cacher. apt-cacher is a cache for your apt package fetches, and speeds up access to apt repositories by keeping the relevant packages inside your network instead of in the great Internet beyond.

Configuring apt-cacher was easy. The set up is done in /etc/apt-cacher/apt-cacher.conf – here is the active configuration in my apt-cacher.conf:

cache_dir = /var/cache/apt-cacher
log_dir = /var/log/apt-cacher
group = www-data
user = www-data
allowed_hosts = 10.22.0.0/16
ubuntu_release_names = dapper, edgy, feisty, gutsy, hardy, intrepid, jaunty, karmic, lucid, maverick, natty, oneiric, precise, quantal, raring, saucy, trusty, utopic

Most important is the allowed_hosts parameter; I also updated ubuntu_release_names to include everything after quantal. The others are predefined values.

The default port is 3142 and you can set up your clients to use the proxy very simply with an additional file in /etc/apt/apt.conf.d – such as 98apt-cacher:

Acquire::http::Proxy "http://10.22.5.89:3142";

This assumes that your apt-cacher server host is 10.22.5.89 and you are using the default port of 3142 – which is configurable.

If you want to test it out – without any actual installs – you might try an upgrade this way:

apt-get update
apt-get -d upgrade

This updates the local package listings – through the proxy! – then downloads all packages needed for an upgrade of your local system, but without installing anything.

The Metapackage Problem and apt-get autoremove

Seems that this is a common problem among people using APT. During an apt-get run, it might tell you that there are a number of programs that can be removed using apt-get autoremove. Users that are too trusting may take these recommendations at face value and thus wind up removing too much – like all of GNOME and X for instance.

First, a little description about metapackages and package dependencies. A metapackage is one that only exists to provide dependencies: a metapackage requires a set of other packages, usually to provide a collective set of packages (such as a GNOME Desktop, a KDE Desktop, or other things). When you install a package like gnome-desktop-environment, it installs everything you need to have a complete set (in this case, a complete GNOME Desktop). This is expected behaviour.

The other thing to understand is the concept of an automatically installed package versus a manually installed package. When you manually install a package – that is, installed it explicitly by name – the package is considered a package that you, the user, wanted on the system. An automatically installed package is only there because a manually installed package required it. If you wanted one of the automatically installed packages, you would have installed it explicitly – right?

The problem comes when these two processes collide: when you install a metapackage, you are really saying that you want all of the dependencies installed, even though all of the dependencies are marked as automatically installed. A metapackage is an easy way of saying that you want all of these packages (listed as dependencies) installed without explicitly saying so. However, the system does not know this.

This problem then manifests itself when you remove one of the dependencies.

Let’s continue with this example: having installed the gnome-desktop-environment package, let’s say you wanted to remove GNOME Evolution – the evolution package. APT will warn you that the gnome-desktop-environment package will also be removed. It is at this point that you should pause and seriously consider the ramifications of what is about to happen – but we’ll continue onwards.

Once you have removed Evolution – and the “GNOME Desktop Environment” metapackage – there are a lot of automatically installed packages that are not required by any packages on the system. What does this mean exactly? Normally, an automatically installed package is not one that you wanted to have installed but it was required by something you did want. However, in this case, these automatically installed packages (such as vino, evince, and totem for example) are in actuality software that you want.

If you try to remove packages through the use of the apt-get autoremove command, you will see a list of packages that are marked as automatically installed and that are not needed by any package currently loaded. In our example, this is a long list of packages that you actually want to keep!

If you have already removed these packages…

There are a few ways to fix this problem once it has occurred. One is to mark all packages in the system as manually installed:

aptitude keep-all

This marks everything in the system as a manually installed package. This defeats the “autoremove” process entirely and may cause your system to contain unnecessary packages over time.

Another option is to use tools to mark packages as manually installed. There are a variety of ways to do this. One way is to actually try to install the package (again): APT recognizes this and just flags the already installed package as manually installed. Another way is to use the apt-mark utility or to use the aptitude unmarkauto command to change the marking on the package (such that the system labels it as manually installed).

However, the best way is to reinstall the metapackage: this will reinstall all of the bits that are needed for operation. If necessary, using the --reinstall option:

apt-get install --reinstall gnome-desktop-environment

This command can be done from the command line and can be done without X or other graphical environment. It can also be done from the rescue shell – and possibly without networking if you have never run apt-get clean.

If you are determined enough (and knowledgeable enough) you can get around this problem by building your own metapackages with the software you desire. Building a metapackage is simple enough and is made trivial through the use of the equivs package. However, if you want a package like gnome-desktop-environment but don’t want specific packages, a better idea might be to get the source to the package and rebuild it with just the software desired listed as dependencies.

You could also “fake it” by using the equivs tools to generate a metapackage that fulfils the role of the package or packages you wish to remove. This is not recommended, however.

An excellent article about using equivs was written in the Ubuntu Forums way back in March of 2008 by “epimeteo” from Portugal.

Even with the capabilities of the equivs package and other metapackages, the best thing to do is to keep the normal metapackage: this allows you to keep the system updated with current packages, prevents future surprises, and saves a lot of work.

Putting Debian packages on hold

When administering a Debian (or Ubuntu) system, putting packages on hold can be very useful. For example, if a critical part of the system is used by developers, and is continually updated, the developers will want to be aware of updates and will want to check their code in the new environment. Programs like Tomcat, Cocoon, MySQL will be in this category.

Similarly, if a critical portion of the system is to be updated, you wouldn’t want it to be part of the automatic updates – though you really shouldn’t automatically update, since you don’t know what can break until you test it.

To hold a package or packages, you should use dpkg --set-selections. If you run the command dpkg --get-selections you can see what is set already:

# dpkg --get-selections | head
acct                                            install
adduser                                         install
apparmor                                        install
apparmor-utils                                  install
apt                                             install
apt-transport-https                             install
apt-utils                                       install
aptitude                                        install
at                                              install
auditd                                          install

As an example, let’s consider the package dnsutils. Let’s see what would happen before we do anything:

# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  bind9-host dnsutils libbind9-60 libdns64 libisc60 libisccc60 libisccfg60 liblwres60
8 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,257kB of archives.
After this operation, 0B of additional disk space will be used.
Do you want to continue [Y/n]? n
Abort.

Now let’s change this. We’ll put the package dnsutils on hold using dpkg --set-selections:

# echo dnsutils hold | dpkg --set-selections

Let us check the results:

# dpkg --get-selections | grep dnsutils
dnsutils                                        hold

Now, when we try the system update again, things have changed:

# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  bind9-host dnsutils libbind9-60 libdns64 libisc60 libisccfg60 liblwres60
The following packages will be upgraded:
  libisccc60
1 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
Need to get 29.9kB of archives.
After this operation, 0B of additional disk space will be used.
Do you want to continue [Y/n]? n
Abort.

Now, dnsutils – and its related packages – are being held back, just as we wanted. The other packages are being held back because they are only required by dnsutils; without upgrading dnsutils, they won’t be upgraded either.

Installing Dell OpenManage with Ubuntu and Red Hat Linux

Dell OpenManage Server Administrator is a program for managing Dell machines. Dell provides support for Windows, SUSE Linux Enterprise Server (SLES), and Red Hat Enterprise Linux (RHEL).

There is, however, no support for Ubuntu whatsoever and no support for a Red Hat Yum Repository. Both of these failings are somewhat rectified by kind people working for Dell. Instructions from Dell regarding the Ubuntu APT repository and the Red Hat Yum Repository are available. The Dell wiki has more details on the Red Hat repository as well.

Over at Keith’s Code there is a fantastic tutorial on how to get Dell OMSA running on Ubuntu.

To get the yum repository loaded into Red Hat Enterprise Linux, just pull this file from the web and execute it:

wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash

Note that these directions come from Dell’s repository page and the file itself comes from linux.dell.com. It pulls in some RPMs that load the repository and update the cache with the available files. This is what the execution looked like for me:

Downloading GPG key: http://linux.dell.com/repo/hardware/latest/RPM-GPG-KEY-dell
    Key already exists in RPM, skipping
Downloading GPG key: http://linux.dell.com/repo/hardware/latest/RPM-GPG-KEY-libsmbios
    Importing key into RPM.
Write repository configuration
Downloading repository RPM
Installing repository rpm: http://linux.dell.com/repo/hardware/latest/platform_independent/rh50_64/prereq/dell-omsa-repository-2-5.noarch.rpm
Installing yum plugins for system id
Loaded plugins: rhnplugin, security
This system is not subscribed to any channels.
RHN channel support will be disabled.
dell-omsa-indep                                                                                                                       | 1.9 kB     00:00
dell-omsa-indep/primary                                                                                                               |  87 kB     00:00
dell-omsa-indep                                                                                                                                      655/655
dell-omsa-specific                                                                                                                    | 1.9 kB     00:00
dell-omsa-specific/primary                                                                                                            |  87 kB     00:00
dell-omsa-specific                                                                                                                                   655/655
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package yum-dellsysid.x86_64 0:2.2.26-6.2.el5 set to be updated
--> Processing Dependency: smbios-utils-python >= 2.2.0 for package: yum-dellsysid
--> Running transaction check
---> Package smbios-utils-python.x86_64 0:2.2.26-6.2.el5 set to be updated
--> Processing Dependency: python-smbios = 2.2.26-6.2.el5 for package: smbios-utils-python
--> Running transaction check
---> Package python-smbios.x86_64 0:2.2.26-6.2.el5 set to be updated
--> Processing Dependency: libsmbios = 2.2.26-6.2.el5 for package: python-smbios
--> Processing Dependency: python-ctypes for package: python-smbios
--> Running transaction check
---> Package libsmbios.x86_64 0:2.2.26-6.2.el5 set to be updated
---> Package python-ctypes.x86_64 0:1.0.2-1.1.el5 set to be updated
--> Finished Dependency Resolution
 
Dependencies Resolved
 
=============================================================================================================================================================
Package                                   Arch                         Version                               Repository                                Size
=============================================================================================================================================================
Installing:
 yum-dellsysid                             x86_64                       2.2.26-6.2.el5                        dell-omsa-indep                           16 k
Installing for dependencies:
 libsmbios                                 x86_64                       2.2.26-6.2.el5                        dell-omsa-specific                       1.5 M
 python-ctypes                             x86_64                       1.0.2-1.1.el5                         dell-omsa-specific                       215 k
 python-smbios                             x86_64                       2.2.26-6.2.el5                        dell-omsa-specific                        71 k
 smbios-utils-python                       x86_64                       2.2.26-6.2.el5                        dell-omsa-specific                        63 k
 
Transaction Summary
=============================================================================================================================================================
Install      5 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
 
Total download size: 1.9 M
Downloading Packages:
(1/5): yum-dellsysid-2.2.26-6.2.el5.x86_64.rpm                                                                                        |  16 kB     00:00
(2/5): smbios-utils-python-2.2.26-6.2.el5.x86_64.rpm                                                                                  |  63 kB     00:00
(3/5): python-smbios-2.2.26-6.2.el5.x86_64.rpm                                                                                        |  71 kB     00:00
(4/5): python-ctypes-1.0.2-1.1.el5.x86_64.rpm                                                                                         | 215 kB     00:00
(5/5): libsmbios-2.2.26-6.2.el5.x86_64.rpm                                                                                            | 1.5 MB     00:06
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        222 kB/s | 1.9 MB     00:08
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : python-ctypes                                                                                                                         1/5
  Installing     : libsmbios                                                                                                                             2/5
  Installing     : python-smbios                                                                                                                         3/5
  Installing     : smbios-utils-python                                                                                                                   4/5
  Installing     : yum-dellsysid                                                                                                                         5/5
 
Installed:
  yum-dellsysid.x86_64 0:2.2.26-6.2.el5
 
Dependency Installed:
  libsmbios.x86_64 0:2.2.26-6.2.el5 python-ctypes.x86_64 0:1.0.2-1.1.el5 python-smbios.x86_64 0:2.2.26-6.2.el5 smbios-utils-python.x86_64 0:2.2.26-6.2.el5
 
Complete!
Loaded plugins: dellsysid, security
Cleaning up Everything
Done!

Activating the APT repository on an Ubuntu system is even easier; add this file to /etc/apt/sources.list.d/ and do an apt-get update:

# Get latest Dell OpenManage software
deb http://linux.dell.com/repo/community/deb/latest /

Dell’s OMSA works with SNMP traps and with IPMI, so make sure that these are fully supported and enabled. There is a good introduction to IPMI from Intel that is often referenced, but is missing: it is available here (and is referenced as 25133701.pdf in links elsewhere). There’s also a good quick overview of IPMI from Terry Gleidt.

Ubuntu: dpkg fails with “failed in buffer_read(fd)”

Recently, I was trying to update (and upgrade) Ubuntu Lucid, and received this error while running apt-get:

dpkg: unrecoverable fatal error, aborting:
failed in buffer_read(fd): files list for package `apparmor': Input/output error
E: Sub-process /usr/bin/dpkg returned an error code (2)

The solution was summarized nicely by Vivek Kapoor; he attributes the solution to C.M. Connelly (from 5 May, 2003). One of the nice things about Connelly’s entry is that he shows you how he debugged the problem he had, and how he fixed it; go read the post.

The error message is coming from dpkg, and refers to the “files list for package `apparmor'“. The files list is in /var/lib/dpkg/info; in this case, /var/lib/dpkg/info/apparmor.list. The problem being referred to in the error message is that, for some reason, this file cannot be read.

This file can be recreated if you have the package on hand; if not, you can fetch it with apt-get install -d package (possibly with the --reinstall option if necessary). The package will be downloaded to /var/cache/apt/archives, and even if a reinstall is attempted, the reinstall will fail (through dpkg) even though the download through apt succeeds.

The info file contains lines like this (using the top five lines of apparmor as an example):

drwxr-xr-x root/root         0 2010-03-30 14:59 ./
drwxr-xr-x root/root         0 2010-03-30 14:59 ./sbin/
-rwxr-xr-x root/root    783108 2010-03-30 14:59 ./sbin/apparmor_parser
drwxr-xr-x root/root         0 2010-03-30 14:59 ./etc/
drwxr-xr-x root/root         0 2010-03-30 14:59 ./etc/apparmor/

To recreate the file, pipe the output from dpkg -c debfile – like this:

dgd@cor:/var/cache/apt/archives$ dpkg -c apparmor_2.5-0ubuntu3_i386.deb |sudo tee /var/lib/dpkg/info/apparmor.list >/dev/null

After that, you should be good to go. You might want to check the disk (using fdisk) and perhaps reinstall the package to make sure all files are okay.

I don’t understand how this dpkg problem can last for seven years now; dpkg should be able to cleanly handle the recreation of this file if necessary, and shouldn’t be reporting obscure messages about its internal workings. From a user perspective – and a system administrator perspective – dpkg should automatically recreate the list file if there are problems with it, or even recreate all control files used by the package.

One very interesting tip was hidden in Connelly’s blog post from 2003: you can use less on a Debian package and it will report useful information (here’s an example from first lines of apparmor):

apparmor_2.5-0ubuntu3_i386.deb:
 new debian package, version 2.0.
 size 350314 bytes: control archive= 3944 bytes.
    2338 bytes,    61 lines      conffiles            
     360 bytes,    18 lines   *  config               #!/bin/sh
     662 bytes,    15 lines      control              
     708 bytes,    10 lines      md5sums              
    3577 bytes,   119 lines   *  postinst             #!/bin/sh
    2402 bytes,    90 lines   *  postrm               #!/bin/sh
    1186 bytes,    52 lines   *  preinst              #!/bin/sh
     959 bytes,    32 lines   *  prerm                #!/bin/sh
     421 bytes,     9 lines      templates            
 Package: apparmor
 Version: 2.5-0ubuntu3
 Architecture: i386
 Maintainer: Ubuntu Core Developers 
 Installed-Size: 2248
 Depends: libc6 (>= 2.8), debconf (>= 0.5) | debconf-2.0, lsb-base, initramfs-tools, debconf
 Suggests: apparmor-profiles, apparmor-docs
 Conflicts: libapache2-mod-apparmor (<< 2.5-0ubuntu2)
 Replaces: apparmor-parser, libapache2-mod-apparmor (<< 2.5-0ubuntu2)
 Section: admin
 Priority: extra
 Homepage: http://apparmor.wiki.kernel.org/
 Description: User-space parser utility for AppArmor
  AppArmor Parser is a user level programs that is used to load in program
  profiles to the AppArmor Security kernel module.

*** Contents:
drwxr-xr-x root/root         0 2010-03-30 14:59 ./
drwxr-xr-x root/root         0 2010-03-30 14:59 ./sbin/

NO PUBKEY errors from APT (Ubuntu Linux)

When you are using APT (the package manager for Debian and Ubuntu Linux), you might receive some NO PUB_KEY errors – warnings that no public key could be found for one software repository or another. You can keep on going without fixing these warnings, but in the interest of security you should fix the problem. It is rather simple, after all.

Firstly, if you are running Ubuntu, you can use the Ubuntu key server to help you fix this problem. The server uses the SKS Key Server software to provide this valuable service.

The method is to first import the key into GPG (GNU Privacy Guard) via the Ubuntu key server (or indeed, any other), and then import it into APT via the apt-key command:

gpg --keyserver subkeys.pgp.net --recv 0123456789ABCDEF
gpg --export --armor 89ABCDEF | sudo apt-key add -

In place of 0123456789ABCDEF put the tag given in the NO PUB KEY message, and then insert the code given in the response from gpg in place of 89ABCDEF for the export.

However: apt-key has an apparently little known command option that will pass options directly to gpg. Using this option (“adv”), the update of the key can be done in one step instead of two:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0123456789ABCDEF

If you already have the appropriate gpg key – or can get it from an appropriate web site or FTP site – you can add it directly to your APT key ring using apt-key. For example, here is an example adapted from Google’s Linux Repository Configuration page:

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

One could just as easily use any other method to get the file that supported the given URL. Remember that you must add the key as root; it won’t work otherwise. If you have the file locally, this is sufficient:

sudo apt-get add somekeyfile.gpg

Hope this helps you.

About a Ubuntu Add-on CD

Where I live, there is only three choices for Internet: dial-up, cellular 3G, and satellite. There is no cable – no DSL – no BBoP – nothing that has any high-speed capabilities. Cellular (new in the area!) works but there is a 5Gb limit for the month – otherwise they will assume that you are performing tasks against your usage contract and reserve the right to cancel without notice (!).

There has been lots of talk about creating an Ubuntu Add-On CD, but nothing official and nothing lasting. There is an Add On CD Creation project as well as a (dated) Unofficial Ubuntu 5.10 Add On CD: neither of these projects seem to have continued. Over at Bounty Source, there is another project called the Ubuntu Plus AddOnCD; likewise, this has not kept pace. There used to be something at Ubuntu Guide but the link is no longer valid to that specific page, although the site seems active and current.

There’s also a DVD built by one or more Indonesian containing Ubuntu repositories; if I could read Indonesian, I could read the websiteand tell you more about it. There do appear to be multiple distributors across Indonesia.

There are two sources that seem to have kept pace, although neither supports Ubuntu Jaunty Jackalope or its descendents. One is an Italian who creates an add-on CD and posts it; it is the UbuntuPiù CD. Another is called the Ubuntu ADDONCD. Hopefully one or both of these sites will update with Jaunty Jackalope soon.

The main method of creating an Ubuntu add-on CD is to create an Ubuntu (Debian) repository then burn it onto CDROM. This is fine as far as it goes – however, the current Ubuntu repositories are 70+ gigabytes in size and mirroring the entire repository at this point is a big deal – especially when terabyte drives are not yet common.

The Debian APT Repository How To is an expansive document describing how to make your own repository. There is also an excellent article on creating an Ubuntu repository with apt-mirror.

Also, some projects assume that you have downloaded all of your added packages without ever having run “apt-get clean” – despite the fact that the apt-get man page recommends that you do so and says that any program that uses dselect will call apt-get clean as part of its normal processing. Using this download cache seems to be very short-sighted, but it is done by tools such as aptoncd which are otherwise very promising.

The apt-move How To, while otherwise quite useful, also makes this assumption. The assumption that “apt-get clean” will not be run is not a valid one!

Perhaps the only way to resolve the matter is to force a download of the desired packages – but currently there doesn’t seem to be any way to download a package and all dependencies not found in the Ubuntu install CDROM – in fact, there’s no way to download all dependencies at all. It should be possible to create a script to do it some how.

To download a specific package – but without its dependencies – is to do thus:

apt-get install --reinstall -dy package

This will put the package into the apt cache for use by other programs that seem to think the cache is never cleaned out.

To get a list of dependencies, you have to use apt-cache and massage the output to get a list:

apt-cache depends bzflag | sed -n '/^[^ ]/d; /]*>/d; s/^.*: //; s/^ *//; p;'

Once you have this list of dependencies you might be able to download the files with something like:

apt-get install --reinstall -dy $(cat resultsfile)

…if you’ve saved it to a file called resultsfile. One problem is that a dependency could be a virtual package – and since the program is working from a cache of repositories, it reports all packages that provide the virtual package, not those that are installed.

One more thing – if you are trying to build a repository and are building from the system’s APT cache – then you can only build a repository relating to the current environment. Thus, if running Ubuntu Hardy Heron, you can’t use the cache to create a repository for Ubuntu Jaunty Jackalope.

I can’t let this end without mentioning RPM. Debian’s biggest weakness is, in my opinion, dpkg: RPM when combined with APT-RPM is so much more powerful than the dpkg and APT environment. RPM is very clean and is even portable: administrators running RPM on Solaris and other machines is not entirely unusual: running dpkg on Solaris would be news-making. Too bad there isn’t a version of Ubuntu that uses RPM (is that a hint?).

Running Kubuntu on the Compaq nc4010

I’ve not been a big fan of Ubuntu in the past – and perhaps mainly from the aesthetics of it, as well as its reliance on Gnome – but I’ve neer felt I gave it a good test. Favoring KDE as I do, I loaded Kubuntu and gave it a run. I’m already a big fan of APT (through having used APT-RPM all these years) – and Kubuntu didn’t disappoint.

As I mentioned before, Kubuntu recognized everything on the system – bluetooth, PCMCIA, USB, wireless, ethernet, sound, video – it all worked.

Now after several weeks, how does it stack up?

I still don’t like the dpkg way of things: RPM is designed (and properly so, I say) to run unattended. If you use rpm to install, you don’t have to respond to any sort of install choices (there is no “partial install” – either it worked or it didn’t). APT is wonderful: dpkg is not – but that’s just my opinion.

I was surprised to see that, in Kubuntu at least, Synaptic seems to have given way to something called Adept. Not sure which I like better. I do know that I just despise the “dynamic search” that searches while you type. It slows everything down. I also don’t like the fact that I can’t sort things by groups – for instance, I’m always installing shells and languages of all sorts. Can’t I just look at those groups specifically?

I also found that with this hardware, the bluetooth adapter is always disabled (or seems to be) after hibernation. Using the key to re-enable it doesn’t help; the key is either intercepted or ignored by Linux. It’s not hard to make sure it is active after hibernation. First, make sure that the bluetooth is on at startup; if not, press the bluetooth button at the top. During the initial boot, the BIOS is in charge and it knows how to react to a press of this key – and the bluetooth light (blue) will come on.

If the bluetooth is not active after Kubuntu comes up entirely, it may be necessary to restart the bluetooth services:

/etc/init.d/bluetooth stop
/etc/init.d/bluetooth start

Don’t use bluetooth restart; it may be that more time is needed or something else. It may or may not be necessary to restart kbluetooth; if so, stop it from the task bar and run it from the System menu under the K menu.

With kbluetooth, you can tell if bluetooth is active or not: if the entire icon is gray (including the symbol) then there is no bluetooth adapter recognized. If the symbol is white, then there is an adapter present (though it may not be active).

There is also the Synaptics touchpad – but this is good stuff. The touchpad has capabilities that are not well-explained out there:

  • Using a two-finger tap or a three-finger tap results in a right-button click and a middle-button click respectively (at least that’s what it looks like).
  • Dragging your finger from top to bottom (or vice versa) on the extreme right side results in scrolling (similar to a mouse-wheel).
  • Dragging your finger from left to right at the top may result in scrolling left-to-right (I couldn’t test this out).
  • A double-tap and swipe is the equivalent of dragging an object – or at least, it is the equivalent of holding down the mouse button.

I found that both ksynaptics and touchfreeze (for configuring the Synaptics capabilities) are missing from repositories; only gsynaptics is present. There is good documentation from Ubuntu on how to set up a Synaptics driver; I recommend it.

The system as a whole does get hot – and, for whatever silly reason, has exhaust vents on the bottom (a silly idea in my opinion). No wonder people’s laps got hot. I have three film canisters that I set in a triangle to support the machine; it works beautifully. I plan to fill them with sand to keep them from moving around.

This combination of software and hardware is wonderful – the machine is nice, and the system is nice. Everything was integrated with a click: DVD playback, MP3 support, Flash support – it all came down with just a click. Everything is supported. I love this machine.

Ubuntu on an Apple MacBook (Intel)

Recently, I discovered this excellent article on putting Ubuntu 7.10 onto an Apple Macbook. I’ve tried Ubuntu in the past, and wasn’t too enthused about its user interface.

There seems to be a large number of people who are enthused about Ubuntu. Me, I’ve been sticking with Red Hat or SUSE (or Yellow Dog) but I’m a sucker for trying new distributions.  The screen shot of rEFIt is nice…

Both Fedora and OpenSUSE have put renewed life into their PowerPC versions. Perhaps I should try them again….

I should mention: first thing everyone mentions about Ubuntu (or Debian) is the ease of using APT. I’ve used APT on my RPM distributions for years. Not a good enough reason to switch…