Tuesday, January 16, 2018

What to do after installing VirtualBox

This post is part 2 of the 3-part series on creating a virtual machine using VirtualBox hosted on a Debian machine. Part 1 focuses on the installation of VirtualBox and the guest OS (FreeBSD). Part 2 addresses things that you should do after installing VirtualBox. The upcoming part 3 deals specifically with accessing USB flash drives from the guest OS.

Install extension pack

The base VirtualBox package is missing some important functionalities: support for virtual USB 2.0 and 3.0 devices, host webcam passthrough, Intel PXE boot, and disk image encryption. To obtain those functionalities, you need to download and install the VirtualBox extension pack.
Note that the extension pack operates under a much stricter license than the GPLv2 of the base VirtualBox package. Specifically, the VirtualBox Extension Pack Personal Use and Evaluation License (PUEL) 'is a free license for personal, educational or evaluation use'. For commercial use, you do have to pay a fee to Oracle.
The procedure to install the extension pack is as follows:
  1. Download the VirtualBox extension pack to your host machine.

    The extension pack is available from the VirtualBox website. The package is universal for all host and guest OSes. However, you should use the same version for both the base and extension pack. In other words, when you upgrade your base, you should also upgrade the extension pack.
  2. Run VirtualBox Manager.
  1. Add extension pack.

    From the File menu, click Preferences. Then, select Extensions in the side panel.

Click the + icon to specify the location of the extension pack file (Oracle_VM_VirtualBox_Extension_Pack-5.2.4-119785.vbox-extpack).

At the end, click Install. Before it begins installation, you will be prompted to accept the software license, and to enter the administrative password.

Bridge host & guest networks

By default, the virtual machine is NATed (not bridged) to your host network. Consequently, the FreeBSD guest is on a different subnet than the host. For example, my FreeBSD guest has a IP address while my Linux host has a IP address. Practically, it means that I cannot ssh to the guest OS from anywhere in my host network. To make that possible, I need to bridge the host network and the guest. The procedure is below (the VM does not have to be powered off for you to change networking).
  1. Open the VirtualBox Manager, and click Settings.
  2. Click Network in the side menu.
  1. Select Bridged Adapter in the Attached to dropdown menu.

Enable copy & paste between host & guest

I administer the FreeBSD guest extensively from its virtual system console running on the Linux host. By default, the clipboard is not shared between the host and the guest systems. That means I often need to manually re-enter commands on the guest OS rather than copy and paste from the host. To share the system clipboard (and save yourself plenty of laborious typing), follow the steps below:
  1. Open the VirtualBox Manager, and click Settings.
  2. Select General, and click the Advanced tab.
  1. Select bidirectional for both Shared Clipboard and Drag and Drop.
Note that, to share the clipboard, the FreeBSD-specific guest additions package (emulators/virtualbox-ose-additions) must also be installed. The instruction for that is already detailed in the Post-installation section of part 1 of this series.

Related posts

Tuesday, January 2, 2018

axi-cache: a new search tool for Debian packages

Debian has no shortage of tools when it comes to searching for packages. Revered oldtimers include apt-cache, apt, and apt-file. axi-cache is the new kid on the block. This post explains what is novel about axi-cache and how to use it.

First, axi-cache needs to be installed and initialized as follows:

# apt-get install apt-xapian-index
# update-apt-xapian-index
The index /var/lib/apt-xapian-index is up to date

The basic axi-cache search is syntactically very similar with the aforementioned search commands:

$ axi-cache search browser
930 results found.
Results 1-20:
100% chromium-driver - web browser - WebDriver support
99% chromium - web browser
99% ruby-browser - browser detection for Ruby
97% libwwwbrowser-perl - Platform independent means to start a WWW browser
96% libhtml-display-perl - module for displaying HTML locally in a browser
96% gcu-plugin - GNOME chemistry utils (browser plugin)
96% python-zope.browser - Shared Zope Toolkit browser components
96% python3-zope.browser - Shared Zope Toolkit browser components
96% chromedriver - web browser - WebDriver support transitional package
96% mythbrowser - Small web browser module for MythTV
96% chromium-widevine - web browser - widevine content decryption support
96% swfdec-mozilla - dummy package for transition to browser-plugin-gnash
95% python-livereload - automatic browser refresher
95% mozilla-plugin-gnash - dummy package for renaming to browser-plugin-gnash
95% python3-livereload - automatic browser refresher (Python 3)
95% qupzilla - lightweight web browser based on libqtwebkit
95% python-livereload-doc - automatic browser refresher (documentation)
95% firefox-esr - Mozilla Firefox web browser - Extended Support Release (ESR)
95% ipig - integrating PSMs into genome browser visualisations
94% epiphany-browser-data - Data files for the GNOME web browser
More terms: refresher livereload safer stable refresh browsing webdriver
More tags: field::religion culture::dutch uitoolkit::gtk field::chemistry use::browsing web::browser interface::x11
`axi-cache more' will give more results

A similar search using apt-cache returns 962 results with the top 20 results being:

389-admin - 389 Directory Administration Server
libds-admin-serv0 - Libraries for the 389 Directory Administration Server
xul-ext-adblock-plus - advertisement blocking extension for web browsers
ajaxterm - Web based terminal written in Python
alevt - X11 Teletext/Videotext browser
alice - Web browser (WebKit or Gecko) based IRC client
xul-ext-all-in-one-sidebar - sidebar extension for Firefox
node-almond - minimal AMD API implementation for use in optimized browser builds
pilot - Simple file browser from Alpine, a text-based email client
ams - Realtime modular synthesizer for ALSA
amule-gnome-support - ed2k links handling support for GNOME web browsers
libjs-angularjs - lets you write client-side web applications as if you had a smarter browser
libjs-animate.css - cross-browser library of CSS animations
libapache2-mod-upload-progress - upload progress support for the Apache web server
apachedex - Compute APDEX from Apache-style logs
xfonts-kapl - APL fonts for A+ development
artemis - genome browser and annotation tool
libjs-asciimathml - Library to render high quality mathematical formulas in a browser
aspectj - aspect-oriented extension for Java - tools
auctex - integrated document editing environment for TeX etc.

Note that, unlike apt-cache, axi-cache returns, by default, only the top 20 hits. You can see the entire result set by specifying the --all option (e.g., axi-cache --all search browser). Alternatively, you can page through the results by running the following command after the initial search.

$ axi-cache more

In general, axi-cache returns more relevant results than apt-cache. The latter implements a rudimentary grep-like search by matching regular-expression text patterns against the package name and description of a package. Unless you have some idea of the package's name, an apt-cache search often returns many irrelevant results, as indicated by the above example. In contrast, axi-cache can rank the search results by relevance with the help of the Apt Xapian Index(axi). This index is a database of package meta-data which includes much more than just a package's name and description. To examine what is indexed, run the following command:

$ axi-cache info
Plugin status:
aliases enabled, up to date (430 days, 15:47:18.356149 older than index)
app-install disabled
apttags enabled, needs indexing (6 days, 23:59:10.729973 newer than index)
cataloged_time enabled, needs indexing (6 days, 23:59:10.729973 newer than index)
debtags disabled
descriptions enabled, needs indexing (6 days, 23:59:10.729973 newer than index)
relations enabled, needs indexing (6 days, 23:59:10.729973 newer than index)
sections enabled, needs indexing (6 days, 23:59:10.729973 newer than index)
sizes enabled, needs indexing (6 days, 23:59:10.729973 newer than index)
template enabled, up to date
translated-desc enabled, needs indexing (1 day, 10:56:58.643851 newer than index)

As an aside, you can update the Apt Xapian Index by executing the following command as root:

# update-apt-xapian-index

The most distinctive feature of the index is its use of tags (apttags). These tags categorize a package by predefined facets such as role, protocol, suite, culture, use, works-with, etc.

Suppose you are multi-lingual and you are looking for packages that install, say, Chinese fonts. You can quickly identify the packages you need using the following command.

$ axi-cache search x11::font and culture::chinese and role::data
13 results found.
Results 1-13:
100% fonts-arphic-bkai00mp - "AR PL KaitiM Big5" Chinese TrueType font by Arphic Technology
100% fonts-arphic-bsmi00lp - "AR PL Mingti2L Big5" Chinese TrueType font by Arphic Technology
100% fonts-arphic-gbsn00lp - "AR PL SungtiL GB" Chinese TrueType font by Arphic Technology
100% fonts-arphic-gkai00mp - "AR PL KaitiM GB" Chinese TrueType font by Arphic Technology
100% fonts-cwtex-fs - TrueType Font from cwTeX - FangSong
100% fonts-cwtex-heib - TrueType Font from cwTeX - HeiBold
100% fonts-cwtex-kai - TrueType Font from cwTeX - Kai
100% fonts-cwtex-ming - TrueType Font from cwTeX - Ming
100% fonts-cwtex-yen - TrueType Font from cwTeX - Yen
100% ttf-wqy-zenhei - transitional dummy package
100% xfonts-intl-chinese - international fonts for X - Chinese
100% xfonts-intl-chinese-big - international fonts for X - large Chinese
100% xfonts-unifont - PCF (bitmap) version of GNU Unifont
More terms: chinese fonts truetype cwtex font koanughi cwttf
More tags: made-of::font culture::taiwanese role::dummy role::app-data culture::greek culture::korean culture::russian

Note that axi-cache supports logical operations such as AND, OR, and NOT.

The following table compiles a non-exhaustive list of common facets and example values. For a complete list, please click here. To make a tag, join the facet and the value using 2 colons, e.g., role::program.

Facet Values
admin filesystem, forensics, monitoring, power-management, virtualization
culture chinese, latvian, russian
field arts, astronomy, finance, mathematics, medicine, statistics
game arcade, board, card, fps, mud, puzzle, rpg, sport, toys, typing
implemented-in c, php
interface 3d, commandline, graphical, shell, x11
network client, configuration, server, service, vpn
office finance, groupware, presentation, spreadsheet
protocol ip, ipv6, smtp, webdav
role app-data, data, debug-symbols, devel-lib, documentation, kernel, metapackage, plugin, program, shared-lib, source
security antivirus, authentication, cryptography, log-analyzer
suite bsd, debian, eclipse, emacs, gnome, gnu, kde, mozilla, mysql, openoffice, openstack, postgresql, xfce, xmms2
system cloud, embedded, laptop, mobile, server, virtual
uitoolkit gtk, motif, ncurses, qt, sdl, tk, xlib
use analysing, browsing, calculating, chatting, checking, compressing, configuring, converting, downloading, driver, editing, entertaining, filtering, gameplaying, learning, login, measuring, monitor, organizing, playing, printing, routing, scanning, searching, simulating, storing, synchronizing, transmission, typesetting, viewing
works-with archive, audio, calendar, db, file, font, image, logfile, mail, network-traffic, spreadsheet, text, unicode, video
x11 font, screensaver, theme, window-manager

In closing, axi-cache is a good search tool for Debian packages because it usually gives you more relevant results. One caveat is warranted, however. Not all Debian packages have tags defined, which is particularly true for packages that are downloaded from third-party non-standard repositories.