Archive for the ‘Linux’ Category
Creating a Deb for an Updated Version
Say you’ve an existing package like gitg and you want to use the new version of gitg or even apply your own patches. You could directly make install but you will probably regret it as soon as you’ll want to upgrade/uninstall, and you want to create a better package than the one created by checkinstall. Apperantly, creating a deb package for a new version of already packaged deb isn’t complicated.
Getting Started
Start by pulling the sources for the already available package. I’ll by using gitg as an example throughout this tutorial.
apt-get source gitg
This will create a folder according to the version of the package, something like gitg-0.2.4. Extract the new version besides it and cd into its directory. The next step is to copy the debian/ directory from the old source package the code you’ve just extracted.
cp -R ../gitg-0.2.4/debian/ .
Update debian/ Files
The next step is to update the files under the debian/ sub-directory.
DEBEMAIL="Guy Rutenberg <myemail@domain.com>" debchange --nmu
This will update the debian/changelog and set the new version. --nmu will create a new “non maintainer upload” version, meaning if the current version was 0.2.4-0ubuntu1, it will change it to 0.2.4-0ubuntu1.1. This will make sure that there won’t be any collision between your package and an official one. If you update to a new upstream version. It might be more suitable to use something like this:
debchange --newversion 0.2.5+20111211.git.20391c4
If necessary, update the Build-Depends and Depends sections of debian/control.
Building the Package
If your building a package directly from version control and not part of an official release, you may need to run
./autogen
at this point.
Now to the actual building:
debuild -us -uc -i -I -B
-us -uc tells the script not to sign the .dsc and .changes files accordingly. -i and -I makes the script ignore common version control files. -B tells debuild to only create binary packages. You can also pass -j followed by the number of simultaneous jobs you wish to allow (e.g. -j3, like in make) which an significantly speed things up.
Installing the Package
The package will reside in the parent directory, for example:
../gitg_0.2.5+20111211.git.20391c4_amd64.deb
At this point you’re basically done. If you want to install the package you can use
sudo debi
while you’re still inside the build directory.
References
- UpdatingADeb
- Man pages for
debuild,dpgk-genchanges,dpgk-buildpackage.
Check if a server is about to run fsck
Couple of weeks ago I installed some updates to my server. And when I restarted it, it didn’t came up. To make things worse, the IPMI console decided to go on strike so I couldn’t see what’s really going on. I presumed that the system isn’t responding because of some kernel panic. After a while, I gave up for that night in hope the in the morning the IPMI would be sorted out. To my surprise, the IPMI was still out of work, but the server was up again. Apparently, the system wasn’t stuck on kernel panic, but on fsck‘ing the harddisks. So in order to avoid such problems in the future I looked for a way to tell when the system is going to run fsck after the next reboot (I also had the IPMI fixed).
$ sudo tune2fs -l /dev/sda6
In the output you will find the following lines:
Mount count: 2 Maximum mount count: 36 Last checked: Tue Jul 26 04:49:18 2011 Check interval: 15552000 (6 months)
“Maximum mount count” is the number of mounts after which the filesystem will be checked by fsck. “Check interval” is the maximal time between two filesystem checks. The command also lets you see the actual mount count since the last check and when it took place.
search_for_updates 0.2
This is a small update to my search_for_updates script which have been laying around. The script allows to search for updates from portage without resolving dependencies. Thus, it’s much faster than
emerge -pvu world
The new version lists the best version available for each package which can be updated using the --verbose flag. You can download the new version from here: search_for_updates-0.2.
iproute2 Cheatsheet
The iproute2 package offers the ip utility, which is a modern replacments for tools such as ifconfig, route, arp and more. It allows to configure addresses, links route and arp tables. The only problem is that its documentation can be quite confusing. This post is intended to be a task-oriented guide to this utility, it’s far from complete and I intend to update it from time to time.
Read the rest of this entry »
Kernel Configuration and nvidia-drivers
This is more of a note to myself, as I keep forgetting this. The propriety NVIDIA drivers, provided by the x11-drivers/nvidia-drivers dislikes alternatives. It will refuse to build against a kernel with the rivafb (CONFIG_FB_RIVA) and nvidiafb (CONFIG_FB_NVIDIA) built in or built as modules. Both can be found (and unset) under:
Device Drivers -> Graphics support -> nVidia Framebuffer Support -> nVidia Riva support
sudo for X Programs
By default (at least on my machine), it wasn’t possible to open X applications using sudo. For example sudoing xclock resulted in the following error:
$ sudo xclock No protocol specified Error: Can't open display: :0.0
The same error appeared even when I executed xclock after running sudo su.
Read the rest of this entry »
Eject Your Kindle and Reconnect under Linux
I am Your User suggested a method to eject your Kindle in Linux. While his method works, you don’t need to specify the partition number. E.g.
$ sudo eject /dev/sdd
where /dev/sdd is the device file of the Kindle.
But what if you want to reconnect it back without plugging in and out the usb cable? You can add the -t switch.
$ sudo eject -t /dev/sdd
Even though it prints the following error:
eject: CD-ROM tray close command failed: Input/output error
it works, and the Kindle reappears in KDE.
Searching for Updates without emerge
The normal way to see which installed packages have available updates on Gentoo is running
$ emerge -puv world
And then you usually select the packages you really want to update and emerge them. However this workflow has several downsides:
- It’s slow. When portage checks for updates this way it fully resolves all the dependencies. This process is unnecessary, as in many cases you aren’t interested in updating all the packages, furthermore in their dependencies.
- It may fail. When portage fails to resolve the dependencies, it will either complain or completely fail. If it complains, it isn’t really that bad, except for the time used for resolving the unanswered dependencies. Sometimes it fails completely (usually when masking is involved) and won’t display any of the available packages, hence leaving the user in the dark (except for some dependency error message).
- It displays lot’s of output. Many times you’re not interesting in seeing the dependencies that will be updated if you emerge every package in the world file. It’s just confusing and distract you from the interesting updates for packages in the world file.
The following scripts tries to work around these problems. It works by querying the portage API for the best version available for each package in the world file. If that version isn’t installed it reports that there are updates waiting for that package. The script runs faster then emerge -pvu world and only displays the packages from the world file. If you find a package that you want to upgrade you can emerge it separately to see the required dependencies.
Upgrading All QT Modules in Gentoo
Upgrading minor versions QT seems to be a hassle, as each version blocks the previous and because of inter-dependencies, Gentoo can’t understand by itself how to solve them. The solution is to tell it to specifically upgrade all installed modules.
Read the rest of this entry »
NVidia driver fails to initialize after X restart
This is mainly a note to myself. Sometimes when the X server is restart it complains that nvidia driver couldn’t be initialized and that no screens were found. This may be a result of a version mismatch between X11′s and the kernel’s nvidia module. The solution is to
modprobe -r nvidia
before restarting the X server.