- Details
Thanks to the work of mgorny and others, working multilib support starts to supersede the need for emul* packages. So, you'll only have those 32bit libraries on your system that you really need. Note: the following is my impression as a user, I'm not a developer.
The first emul package that is replaced is emul-linux-x86-xlibs. emul-linux-x86-xlibs-20130224-r1 has been introduced as a meta package that depends on the new single multilib-enabled ebuilds (the -r1 version itself does not install any file!). Therefore, old ebuilds can depend on the new -r1 version and still get all 32bit x11 libs. As a user, you'll have to do the following if you want to transit from the emul-*-xlibs package to the split ebuilds and keep all the libraries that were also installed with the emul package:
- Add the following list of packages to /etc/portage/package.accept_keywords:
=x11-proto/xineramaproto-1.2.1-r1 ~amd64
=x11-libs/libXinerama-1.1.2-r1 ~amd64
=x11-libs/libXScrnSaver-1.2.2-r1 ~amd64
=x11-libs/libXau-1.0.7-r1 ~amd64
=x11-proto/xextproto-7.2.1-r1 ~amd64
=x11-libs/libXpm-3.5.10-r1 ~amd64
=x11-libs/libXxf86dga-1.1.3-r1 ~amd64
=x11-proto/xf86vidmodeproto-2.3.1-r1 ~amd64
=x11-libs/libXft-2.3.1-r1 ~amd64
=x11-proto/xf86bigfontproto-1.2.0-r1 ~amd64
=x11-proto/xf86dgaproto-2.1-r2 ~amd64
=x11-libs/libXtst-1.2.1-r1 ~amd64
=x11-libs/libpciaccess-0.13.1-r1 ~amd64
=x11-libs/libXext-1.3.1-r1 ~amd64
=x11-libs/libX11-1.5.0-r1 ~amd64
=x11-libs/libvdpau-0.5-r1 ~amd64
=x11-libs/libXvMC-1.0.7-r1 ~amd64
=media-libs/fontconfig-2.10.2-r1 ~amd64
=x11-proto/renderproto-0.11.1-r1 ~amd64
=x11-libs/libXmu-1.1.1-r1 ~amd64
=x11-libs/libXxf86vm-1.1.2-r1 ~amd64
=x11-proto/recordproto-1.14.2-r1 ~amd64
=x11-libs/libxcb-1.9-r1 ~amd64
=x11-proto/compositeproto-0.4.2-r1 ~amd64
=x11-proto/xproto-7.0.23-r2 ~amd64
=x11-proto/xcb-proto-1.8-r1 ~amd64
=x11-libs/libXcomposite-0.4.4-r1 ~amd64
=x11-libs/libXt-1.1.3-r1 ~amd64
=x11-libs/libXp-1.0.1-r1 ~amd64
=x11-proto/inputproto-2.3 ~amd64
=x11-libs/libXrandr-1.4.0-r1 ~amd64
=x11-libs/libXv-1.0.7-r1 ~amd64
=x11-proto/scrnsaverproto-1.2.2-r1 ~amd64
=x11-libs/libXcursor-1.1.13-r1 ~amd64
=x11-proto/randrproto-1.4.0-r1 ~amd64
=x11-libs/libXaw-1.0.11-r2 ~amd64
=media-libs/freetype-2.4.11-r2 ~amd64
=x11-proto/printproto-1.0.5-r1 ~amd64
=x11-libs/libXfixes-5.0-r1 ~amd64
=x11-libs/libXi-1.7 ~amd64
=x11-proto/videoproto-2.3.1-r1 ~amd64
=x11-libs/libXrender-0.9.7-r1 ~amd64
=dev-libs/libpthread-stubs-0.3-r1 ~amd64
=x11-libs/libICE-1.0.8-r1 ~amd64
=x11-proto/damageproto-1.2.1-r1 ~amd64
=x11-proto/kbproto-1.0.6-r1 ~amd64
=x11-libs/libXdmcp-1.1.1-r1 ~amd64
=x11-libs/libSM-1.2.1-r1 ~amd64
=x11-libs/libXdamage-1.1.4-r1 ~amd64
=x11-proto/fixesproto-5.0-r1 ~amd64 - If you are not already using the latest emul-* packages, you also have to install the latest version of all other emul packages you use as they depend on each other. E.g. you can simply add the following to the list above:
app-emulation/emul-linux-x86-qtlibs ~amd64 app-emulation/emul-linux-x86-baselibs ~amd64 app-emulation/emul-linux-x86-compat ~amd64 app-emulation/emul-linux-x86-db ~amd64 app-emulation/emul-linux-x86-xlibs ~amd64 app-emulation/emul-linux-x86-medialibs ~amd64 app-emulation/emul-linux-x86-soundlibs ~amd64 app-emulation/emul-linux-x86-sdl ~amd64 app-emulation/emul-linux-x86-opengl ~amd64 app-emulation/emul-linux-x86-gtklibs ~amd64
- Due to a communication problem, you have to add the following to /etc/portage/package.unmask:
=emul-linux-x86-xlibs-20130224-r1
- Add ABI_X86="64 32" or the abi_x86_32 use flag to your defaults in make.conf
- Update your system as usual. It should work without further intervention.
Only after all ebuilds - that you use and that depend on emul-linux-x86-xlibs - are updated, you can add the abi_x86_32 use flag only to those packages that you really need and you can remove emul-linux-x86-xlibs.
If you don't want to migrate you can stay with the stable or the latest emul packages before the -r1 as long as they are in the official tree. Mixing <emul-linux-x86-xlibs-20130224-r1 with already enabled 32bit multilib ebuilds will not work out.
A corresponding thread in the forum: http://forums.gentoo.org/viewtopic-p-7268388.html
UPDATE (2013-04-22): Looks like you have to add the following to /etc/portage/package.unmask as well (see Bug #466546):
=media-libs/fontconfig-2.10.2-r1 =media-libs/freetype-2.4.11-r2 =x11-libs/libXft-2.3.1-r1
- Details
In this article, I describe in what points my installation of Gentoo Linux on the Lenovo Thinkpad T530 2429-2UG differs from the official guide at http://www.gentoo.org/doc/en/handbook/. Some configs and scripts can be found in my T530 git repository at github.com.
Partitioning and SSD optimizations
As space on SSDs is expensive, I moved away from my usual habit to keep Windows (fresh install consumes 37GB) as a backup OS on the disk. To enable recovery, I made a backup of the three partitions using partimage and stored the images on a different host using NFS (partimage also has an own network protocol). Afterwards, I wiped the whole SSD using so-called secure erase (https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase). This way, all blocks should be marked as empty (see TRIM). As the BIOS issues the freeze command, one has to do a suspend-to-ram cycle before secure erase is possible. Because the Gentoo installation image does not support this, I used an Ubuntu image to issue the erase command.
If you understand german, there is also a collection of SSD-related articles on ubuntuusers.de.
To keep up with state of the art, I switched to GPT partitioning (and therefore grub2). For GPT, one simply uses gdisk instead of fdisk. This way, it also automatically handles proper sector alignment. As I was not exactly sure, how my final partitioning scheme will look like (e.g., I might encrypt some directories), I used LVM to allow new "partitions" or changing their size afterwards. For the beginning, I created two logical volumes for / and /home. As my T530 has 8 GB Ram and I have a SSD, I did not create a swap partition. For a LVM howto, see the Gentoo wiki. To pass-through TRIM commands, one has to enable the issue_discards option in the LVM config file.
Update: If you plan to boot with UEFI instead of BIOS, also create a small GPT partition with 200-500 MB. Booting with UEFI and grub2 works so far, but I didn't notice any improvements.
As filesystem, I chose the standard: ext4. To avoid write accesses, I mounted /tmp using tmpfs and mounted /var/tmp using -o bind to /tmp. Additionally, I linked ~/.thumbnails to /tmp/, deactivated the browser cache and configured Thunderbird to not store the emails on my disk. Usually, I always have a fast internet connection, so this is not a problem for me.
In order to keep /var/log/ in a tmpfs as well, I wrote a small initscript that will rsync chosen files at startup/shutdown with a permanent storage on the SSD. The script and instructions can be found here.
I am also experimenting with a reduced portage tree as described here. An actualized version of the script can be found in my T530 git repository. In my case, it reduced the portage size from 830MB to 124MB.
With the following command, IO accesses can be monitored: iotop -aobPq -d 4 . As I'm using LVM, all accesses to the actual hard disk should be accumulated in the lines with processes named like "[jbd2/dm-0-8]".
Kernel
As my T530 contains new devices, I directly started with the 3.4.5 gentoo-sources kernel. My kernel .config can be found in my T530 git repository.
Sound
Sound works out-of-the-box so far with the Intel HDA and Realtek module. However, if you're using a docking station, the headphone jack is not working automatically, yet. The model=thinkpad parameter seems to work for pre-IvyBridge models only. With hda-analyzer I found the required settings that can be set using the commandline with the hda-verb tool and following commands:
./hda-verb /dev/snd/hwC0D0 0x1b SET_PIN_WIDGET_CONTROL 0x40
./hda-verb /dev/snd/hwC0D0 0x1b SET_AMP_GAIN_MUTE 0xb000
./hda-verb /dev/snd/hwC0D0 0x1b SET_CONNECT_SEL 1
Probably this is true for other [TWX][45]30 models as well. A script can be found in my T530 git repository. If you hear a click during suspend/resume, this is caused by the laptop-mode-tools that put the device to sleep. This can be deactivated in the laptop-mode configs.
Update: Thanks to Takashi Iwai, the following kernel patches enable the jacks in the docking station and, if necessary, allow to force this settings using a model=lenovo-dock kernel parameter: Patch 1, Patch 2. They should be included in kernel version 3.6 or 3.7.
Update: Regarding DisplayPort/HDMI audio output see this part.
Network interfaces
Wired ethernet interface works out-of-the-box with the e1000e module.
For wireless connection, the iwlwifi module and the firmware in sys-firmware/iwl6005-ucode are required. If you plan to install Gentoo over WLAN, copy the firmware onto a USB stick and after booting into /lib/firmware. If your connection gets stuck with a 11n router, try adding iwlwifi.wd_disable=1 and/or iwlwifi.11n_disable=1 to your parameters until the bug is fixed in a new kernel version.
Graphics
My T530 contains the HD4000 GPU in the IvyBridge processor and a dedicated Nvidia NVS 5400M. Both work out-of-the-box. If the system freezes after booting the kernel try adding the nomodeset parameter to the kernel parameters. For now, I choose the integrated GPU when on batteries and the dedicated GPU in the docking station (the DVI port on the docking station is an internal DisplayPort interface, and all DisplayPorts are only connected to the dedicated GPU).
Update: I installed Bumblebee through portage and it seems to work so far, except that it looks like the current nouveau module does not support 3D acceleration on this card, yet. I will test again with a newer kernel. The installation is pretty easy, just unmask and install, add user to bumblebee group and start bumblebee and vgl during boot. For nouveau support, you have to build it as separate module, not builtin in the kernel.
Update: Displayport works out-of-the-box with my DP-2-HDMI cable. Only issue was the sound. Auto-detection of pulseaudio seems to have a bug and you have to manually configure the audio sinks as described in the ArchWiki. Afterwards, you just have to redirect the output of your application to the HDMI device (default is internal audio) using kmix, for example.
Other stuff
The webcam works with uvcvideo module. I added some lines to the actions file of the acpid in order to dynamically (un)load the module after pressing the function key.
Other things like the Cardbus slot and Firewire are untested, yet. As I never used Cardbus and Firewire so far, I deactivated both in the BIOS for security (I don't know if they still allow attached devices direct memory access).
- Details
Avahi-tray enables fast access on services announced by Avahi/MDNS using an application in the system tray. Users can set custom commands that are executed on certain events or if a certain service has been selected. With python-notify, certain events can also be reported to the user using libnotify.
- Details
With increasing code size, outdated stuff is easily forgotten in header files. I wrote a small script that compares the list of declared symbols with the list of symbols present in the symbol table of the final binary. The script lists declarations of symbols that are not required anymore.
Please note, this list may contain false positives and may be incomplete!
https://github.com/anyc/toolsnstuff/blob/master/unused_declarations.sh
- Details
I wrote a little ebuild that installs MatLab on a Gentoo Linux system. With the ebuild, the installed files are tracked by the package manager and do not pollute the filesystem.
The process is not fully automated, so please mount the ISO to a root-accessible path, e.g.,
fuseiso matlab.iso my_path/ -o allow_root
and provide the path using CDROM_ROOT environment variable, as well as the path to the license file in MATLAB_LICENSE_FILE and the key either using MATLAB_INSTALLATION_KEY or using MATLAB_INSTALLATION_KEY_FILE if the key is in a file.
A recent version of the ebuild can be found here.
- Details
Ever tried to mount a partition that is inside an image with multiple partitions? With kpartx of the multipath-tools package, it's really easy. It scans the image and creates a individual device file for every partition using the device mapper.
Example in case of a KVM image: http://blog.piotrj.org/2009/03/mounting-raw-kvmqemu-image.html
- Details
First create a loop device for the image:
losetup -f /path/to/image
Then create a vmdk file for the resulting loop device:
VBoxManage internalcommands createrawvmdk -filename my_image.vmdk -rawdisk /dev/loop/0
This vmdk file can be used by Virtualbox as a hard disk.