Frugalware 20070218 (-current) Documentation Table of Contents JavaScript must be enabled in your browser to display the table of contents. Copyright (C) 2003-2007 The Frugalware Developer Team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". 1. About Frugalware Seeing this feast of wonderful code spread in front of me as a working system was a much more powerful experience than merely knowing, intellectually, that all the bits were probably out there. It was as though for years I'd been sorting through piles of disconnected car parts - only to be suddenly confronted with those same parts assembled into a gleaming red Ferrari, door open, keys swinging from the lock and engine gently purring with a promise of power... -- Eric S. Raymond The aim of creating Frugalware was to help you doing your work faster and simpler. We hope you will like it. In this introduction, we would like to answer a few questions which were asked in several interview with VMiklos, the founder of the project. You can reach the full list of articles that have been posted about Frugalware [1]here. 1.1. Short Frugalware is a general purpose linux distribution, designed for intermediate users (who are not afraid of text mode). 1.2. Long What branches does Frugalware have? "We have a -current and a -stable branch. The -current branch is updated daily, and we provide security support for our -stable branch till the next release, for approximately 6 months." What is "The Frugalware Philosophy" about? "Briefly: simplicity, multimedia, design. We try to make Frugalware as simple as possible while not forgetting to keep it comfortable for the user. We try to ship fresh and stable software, as close to the original source as possible, because in our opinion most software is the best as is, and doesn't need patching." What is the license of Frugalware? "The license of Frugalware itself stands for the license of the buildscripts used for building Frugalware. That source is available under the GPL license [2]here. Frugalware originally init scripts written by Patrick J. Volkerding, creator of the Slackware Linux distribution. We GPL our additions, but Patrick J. Volkerding's code is still under the BSD license. Frugalware also has a few side projects, like our pacman-g2 package manager, the Frugalware installer an so on. They are available under the GPL license, too. For more info about the license of the packages included in Frugalware, refer to the /usr/share/doc/*/COPYING files." What package manager does Frugalware use? "We have our own package manager, called pacman-g2. It stands for the second generation of the pacman package manager, as it was originally based on Judd Vinet's great work. The packages are simple .tar.bz2 files, pacman-g2 is written in C, unlike Slackware's shellscript-based package manager (which may be rather slow sometimes)." How does Frugalware manage updating obsolete packages? "We don't have any standalone program for updating packages as pacman-g2 manages this task too. To update your package database, use pacman-g2 -Sy, and to update your packages according the just synchronized package database, you use pacman-g2 -Su. To install package foo with the necessary dependencies directly from one of our ftp servers, you should issue pacman-g2 -S foo. For more information, refer to the pacman-g2 man page." Is there any community support available for Frugalware? "We have mailing lists, irc channels and forums that can be used to communicate with us or with other users and to get help. You can reac ha list of mailing lists available [3]here. The irc channels are on the Freenode network (server: irc.freenode.net), the discussion forums are available [4]here." Is there any commercial support available for Frugalware? "No, there isn't for now, and currently it isn't planned, either." For whom is Frugalware recommended to use? "Frugalware is designed for intermediate users. Installing Frugalware is not a magic, of course, but you should read some documentation if you don't know what a partition, an MBR (Master Boot Record), etc. is." How to become a developer? "Get involved! :) Download the FST (Frugalware Source Tree) using the repoman upd command, which is available in the pacman-tools package. Then start to play with the FrugalBuild scripts, for a skeleton, refer to the /docs/skel directory. Try to improve them, or write a new one for a currently unsupported program. Then open feature requests in the [5]Bug Tracking System and attach your patches. From this point everything will come naturally to you :)" What do developers do? "In short, what they want to, if they play a square game. They may maintain packages: building them if a newer version is available and update the FrugalBuild scripts to work correctly against a newer version. They can contribute a new build script to a previously non-existent package. They write documentation, fix bugs, provides supports, or anything else in connection with the Frugalware community. If you only want to help us, but you don't want to hack, you may help in translating Frugalware to your or other language. And, of course, we happily accept donations :)" Who develops Frugalware? "An amazing group of volunteers, who are motived by the users to do so. They also do it as a hobby, and they are always working on having up to date knowledge to make Frugalware even better for you." Is Frugalware specialized in a certain purpose? "No, it's a general purpose distribution, for desktops, mobile computers and servers." Do you plan to release a live cd? "Yes, you can build your own, if you fetch the experimental code of the fwlive repo. We'll provide binary ISO images once the code is stable enough." Does Frugalware support languages other than English? "Yes, it supports all languages supported by the packages. If the init scripts, the setup or the documentation is not available in your language, then it simply means it haven't translated yet." What about Asian languages? "Frugalware roughly supports Asian languages, but don't expect too much - using UTF8 is not the default where it is possible." What architectures does Frugalware support? "Currently we support x86 (Pentium Pro or higher) and x86_64 (k8, aka. amd64) platforms." 2. Quick reference 2.1. Informations * Package management: pacman-g2 (command line) * No PAM problems/support (a'la Slackware) * Linux kernel 2.6 (no 2.4 support) * i686 or later CPU needed on x86 * The latest documentation is [6]here. 2.2. Features * Supported architectures: i686, x86_64 * Stable releases every 6 months * Security support for stable releases * Text mode installation * Offline installation, netboot install supported * Prebuilt CD/DVD, USB, TFTP images are available * Localization supported whereever it's possible * About 3000 source packages and (as of Februrary 2007) 3200 binary packages supported. 3. Installation 3.1. Choosing installation flavor Depending on your needs, there are different installers with different characteristics. You can choose which fits you the best. 3.1.1. Installing from CDs Which CDs do you need? If you install a server without X, only the first. If you need a graphical system, then you'll need the second CD as well. Note Don't download CDs 3-11 unless you don't have an internet connection! You can install language packs later from FTP servers if you need them. 3.1.2. Installing from DVD If you don't have any Internet connection but you want language packs and other optional packages, you'll need two DVDs. Pros: a full offline installation is possible. Cons: Large amount of data must be downloaded, presumably some unnecessary packages too. 3.1.3. Netinstall This is a small ISO image, currently under 32Mb, which is able to boot up, configure the network and install the system with the selected packages, which are downloaded on-the-fly as required. Pros: Small image size, no wasted bandwidth with downloading outdated or unnecessary packages. Cons: No offline installation possible, high bandwidth or hours of patience required for a full installation. 3.1.4. Fwbootstrap (self-contained chroot) This is a tarball which has to be downloaded and unpacked. Mostly useful for developers who can compile packages in this build environment on a non-Frugalware host system. The archives can be found under [7]http://ftp.frugalware.org/pub/other/chroot Usage example: 1) Download the tarball wget http://ftp.frugalware.org/pub/other/chroot/fwchroot--.tar.b z2 2) Unpack it tar xvjf fwchroot--.tar.bz2 3) Enter the chroot. The parameter is the root of the chroot. cd fwchroot-- @* ./fwbootstrap ./ 4) Use it (build a package or two) 5) Exit from the shell and fwbootstrap will unmount the necessary dirs for you. You can get a list of installed packages in the chroot with issuing the pacman -Q command. 3.1.5. A manual bootstrap So you want a complete Frugalware installed into /mnt/foo. First of all, you must have a running Frugalware where you are able to do pacman -Sy core base -r /mnt/foo which installs the core and base pkgs into it. But beware: $ pacman -Qo /etc/sysconfig/keymap No package owns /etc/sysconfig/keymap $ pacman -Qo /etc/profile.d/lang.sh No package owns /etc/profile.d/lang.sh $ pacman -Qo /etc/fstab No package owns /etc/fstab so you have to copy or forge them by hand. 3.2. Obtaining a source media A Frugalware installation media can be obtained from several sources. You can download it freely via HTTP, FTP or rsync. You can also grab it via bittorrent, see [8]Linuxtracker for example. Here are some examples: Via FTP: wget ftp://ftp3.frugalware.org/mirrors/frugalware/pub/frugalware/frugalware- version-iso/frugalware-version-arch-media.iso Via HTTP: wget http://www5.frugalware.org/linux/frugalware/pub/frugalware/frugalware-v ersion-iso/frugalware-version-arch-media.iso Via rsync: rsync -avP rsync://rsync4.frugalware.org/ftp/pub/linux/distributions/frugalware/fr ugalware-0.6-iso/frugalware-0.6-i686-dvd.iso ./ More info and the full list of mirrors can be found at our [9]download page. 3.3. I have a skeleton system installed from CD/DVD, and I want to use the packages on the media afterwards There are two methods. First is the easiest, but needs quite a lot of space (and caution not to use pacman -Scc ;) ): mount the media and install all the .fpm's found in frugalware-i686 (or frugalware-x86_64) dir to /var/cache/pacman/pkg. Second is a bit more challenging, but more usable. Add a new line to /etc/pacman.conf before the other Include lines: Include = /etc/pacman.d/cd Create a new file /etc/pacman.d/cd file with the following contents: Server = file:///media/dvd/frugalware-i686 On x86_64, use this one: Server = file:///media/dvd/frugalware-x86_64 The media should be mounted on /media/dvd, or change the Server lines appropriately. The section and the filename must be the same. Also you can only install packages then from the given media, so you have to insert the first CD if you install a package from the first CD and so on. This is something you should pay attention for. 3.4. The installation process Important Do not worry is you misconfigured something! Just press in the next dialog and you will see the menu. Just go back to the given part and you can reconfigure it. 1. After downloading and burning the CDs/DVD, insert the first CD/DVD to your CD/DVD drive, and reboot your computer. In the grub menu, you can disable the framebuffer, if a framebuffer with resolution 1024x768 is not suitable for your graphics card or monitor. After that, grub loads the kernel and the initrd image. 2. At the first dialog, you should select your language. If your language is not on the list, you should choose a language fits for you. You can change these options after installing too. 3. The next dialog is only a greetings. Just push . Now it is time to select your keyboard type. Pick your one, then hit ! 4. After selecting your keyboard map, setup searches for installation media automatically. 5. If you use a netinstall image follow these sub-steps. Otherwise jump to the 6th point! Note These steps sets up your network options during the install. When you finished installing Frugalware the installer will ask for network options again. Those options will be the installed system's options. 1. Now you should select your connection type. The installer uses the netconfig utility. You can also find the documentation for netconfig in this documentation. See the part called: Networking. 2. After setting up the network you can choose a mirror for downloading the packages. The installer will try other mirrors too. This feature is useful when you have got a fast local mirror or something similar. 6. The next step is partitioning. Frugalware setup displays a list of your hard disks, you should choose one of them to partition it with a program. You can select the partitioning program in the next dialog, currently fdisk and cfdisk are included. You should create at least one partition with type Linux, and it is recommended to create a swap partition (with type Linux swap). The swap size should be 500-1000MB. When you have finished partitioning, press . 7. The following list displays your swap partitions, here you can choose which swap partitions are allowed to be used by Frugalware. Then setup formats your swap partitions. If you have no swap partition just press ! 8. In the next window, you should select your root partition first, then you can choose if you wish to format it or keep the existing filesystem on it. After selecting the root partition, you can setup other Linux partitions, optionally format them, and set their mount points. Using a separate partition is supported for /boot, /home, /var, but not yet for /usr. 9. After having your Linux partitions mounted, you should do the same with your DOS/Windows ones. Setup will display a list of them, if any exists. You should simply choose a mount point for them here. 10. Now it is the time to select if you want to use expert menus or not. If you choose expert menu after selecting the categories you will be able to pick packages one-by-one from the selected categories. So if you select apps and base the installer will give you a list of packages in apps, when you finished picking the packages you will see the packages in base. After picking them the installation begins. If you choose the normal menu (it's the default) then you will only see the groups, but not the individual packages. So after picking the groups installation starts. 11. The next step is to select package categories. If you will not use KDE or GNOME, you may probably want to disable them. In most cases, it is not a good idea to disable other categories. If you selected the expert menu you will see the package list after this dialog. Note If the group list is empty that means you probably misconfigured your network. Please go back and try to fix it. You can also test your connection if you press Alt+F2 and try to ping some servers. 12. Setup will install the packages your selected from the first CD. When it is done, you will be prompted to insert the next Frugalware install. If you have only one disc, feel free to abort installing packages, you can install anything else from the net later. 13. After installing the packages, setup will install grub onto your hard disk. There are four options here: installing to the MBR, the root partition, a floppy or simply skipping. Installing to the MBR is the good choice if you want Frugalware to manage your computer's booting. The root is a good idea if you want to install grub into your root partition. In this case, grub will not modify your existing boot manager. Floppy is a good idea for example if you don't have any boot manager installed, but you want to leave your MBR unmodified. 4. How to contribute If you find our work and effort worth it, please consider donating. This is not limited to monetary contributions, every donation of a limited valuable resource (including your time, knowledge) is appreciated. Depending on your resources, there are many ways to help us. 4.1. Translation A comprehensive and multi-language documentation is very important. With linguistic and no programming knowledge and some time, you can help us create (by asking) and maintain different translations. 4.2. Application packaging In the [10]Bug Tracking System, there are feature requests for some packages. The process of making packages is well documented, and with some GNU/Linux experience, it isn't difficult. But it takes time, so submitting well-packaged software is a great way to help us and save our time. 4.3. Developing Of course, any skilled help is appreciated in developing core systems, like contributing code to pacman or the setup. 4.4. Donating hardware By sending us some wanted hardware (see [11]donations), you can make testing packages easier, or speed up the package creation process within a specific architecture. 4.5. Artwork We usually update our artwork (background images, grub splash, desktop manager themes, window manager splashes and so on) for each release. If you are skilled to help, you're welcome. :) 4.6. Support If you have time and knowledge, monitor the forums, read the mailing list posts, hang around on IRC and try to answer the questions, solve the occured problems. 4.7. Find bugs If you find bugs, you can help with submitting well-written bugreports, see the Reporting Bugs section for more info. 5. The Frugalware Bugreporting HOWTO 5.1. Introduction The aim of this HOWTO is to explain how to choose a task name and what to include in a feature request/bugreport to help Frugalware developers speed up the process of fixing a bug or fulfilling a feature request. 5.2. Where The URL of our Bug tracking system is: http://bugs.frugalware.org/ 5.3. General Before opening a task, use the search function, maybe there is a task for your bug/feature. In that case just add a comment about "I can reproduce this, too." or "I would enjoy this feature, too." If you'd like to report outdated package make sure that it isn't listed on [12]this site. When your package is listed please do not report it as we know there is a new version and we will update it as soon as possible. 5.4. Bugreport Please include the following things, unless you know what you are doing: 1. Description of Problem - never say "does not work", quote the error message 2. Steps to reproduce the problem 3. Actual Results 4. Expected Results 5. How often does this happen? 6. Additional Information The default arch is i686 and the default version is -current. If these are not true, don't forget to change them! If you report a -current installer bug, then maybe -current is not enough, please specify the snapshot date. If you found a security bug, then use the [SEC] prefix in the task name. 5.5. Feature Requests Please don't request more than one package in a feature request. Open a task for every package. (Of course you don't have to open task for dependencies if they are also missing from out packages.) If you request a package, please include: . The name of the application (yes, "more games" is not enough!) . The URL of the application . Optionally a short note about why do you think this package would be interesting for others, too If you have a FrugalBuild for the package already, then after opening the task, upload it as an attachment. In this case, please prefix your task name with [FB], because this way it'll be reviewed sooner. 5.6. Pacman-g2 problems If you get a crash from our package manager then we need a backtrace from gdb. Here are the instructions to get a backtrace: * Find the command line that triggers the crash. For example: pacman-g2 -Sy * Get the pacman-g2 darcs repo and compile it with debug symbols enabled: darcs get --partial http://darcs.frugalware.org/repos/pacman-g2 cd pacman-g2 sh autogen.sh ./configure --enable-debug make * Then run pacman-g2 in gdb and get the trace: cd src/pacman-g2 sudo libtool gdb ./pacman-g2 run -Sy * When pacman-g2 crashed, get the trace by typing bt. Here is an example: Program received signal SIGSEGV, Segmentation fault. 0x0805035e in pacman_sync (targets=0x0) at sync.c:354 354 *p = 1; (gdb) bt #0 0x0805035e in pacman_sync (targets=0x0) at sync.c:354 #1 0x08054594 in main (argc=2, argv=0xbfee1844) at pacman.c:609 (gdb) * Attach the output of bt to your bugreport. 5.7. Fixed in darcs Your feature request / bugreport may be closed with a "Fixed in darcs ..." message. Darcs is our source control management software (just like CVS). If your task is not considered to be important, then it will be fixed/implemented only in darcs, without increasing the package release. This means that it will be automatically included in the next release. 6. Mobile computers 6.1. Battery Notebook users are usually interested in the state of their battery. Usually the following steps are required to enable this functionality: Add the following two lines to your /etc/sysconfig/modules: battery ac The next task is to enable the acpid service: service acpid add Then the easiest way is to reboot, or if you don't want do do so: modprobe battery modprobe ac service hald stop service dbus stop service acpid start service dbus start service hald start The only remaining task is to start a client: if you're on console, try the acpi command, or the relevant applet of your favorite window manager. 6.2. Hibernation Hibernating your computer can cause data loss or severe filesystem damage if things go wrong. It's highly advised that first, you should consider if hibernating is worth the effort at all. Try it on a fresh installation first, instead of a production system. From kernel/suspend.c: * BIG FAT WARNING ********************************************************* * * If you have unsupported (*) devices using DMA... * ...say goodbye to your data. * * If you touch anything on disk between suspend and resume... * ...kiss your data goodbye. * * If your disk driver does not support suspend... (IDE does) * ...you'd better find out how to get along * without your data. * * If you change kernel command line between suspend and resume... * ...prepare for nasty fsck or worse. * * If you change your hardware while system is suspended... * ...well, it was not good idea. * * (*) suspend/resume support is needed to make it safe. You have been warned. If you are still not discouraged, read on! First, you need to create a swap partition (if you don't have any yet). You have to add an extra resume=/dev/swappart kernel parameter to /boot/grub/menu.lst. For example, on my machine the old line was: kernel (hd0,2)/boot/vmlinuz ro root=/dev/hda3 quiet vga=788 The new line: kernel (hd0,2)/boot/vmlinuz ro root=/dev/hda3 quiet vga=788 resume=/dev/hda2 After the above are done, you must reboot. The hibernation can be started with: echo shutdown > /sys/power/disk; echo disk > /sys/power/state and next time you boot your kernel it should resume. For more info, look at /usr/src/linux/Documentation/power/swsusp.txt. It requires the kernel documentation, which can be installed issuing the pacman-g2 -S kernel-docs command as root. 7. Packages The following sections describe the configuration of some packages. 7.1. rhythmbox If you upgraded from a version where Rhythmbox hung while importing songs, you must delete your rhythmbox database otherwise the problem will still occur. This can be done by running the following command as the user you want to rebuild the database for: rm -Rf ~/.gnome2/rhythmbox 7.2. gnome-applets The Mini Commander applet has been replaced by Deskbar. If you want the functionality provided by the Mini Commander applet, please install the deskbar-applet package with pacman 7.3. udev /lib/udev/devices is the directory where packages or you can place real device nodes, which get copied over to /dev at every boot. This replaces our previous /etc/sysconfig/udev solution. (The change was recommended by upstream.) 7.4. src /lib/udev/devices is the directory where packages or you can place real device nodes, which get copied over to /dev at every boot. This replaces our previous /etc/sysconfig/udev solution. (The change was recommended by upstream.) 7.5. nss-mdns To enable IPv4 multicast DNS lookups, append mdns4 to the hosts line in /etc/nsswitch.conf. Use mdns6 for IPv6 or mdns for both. 7.6. avahi Warning If you have rlocate installed on your system, Avahi will not run and therefore Zeroconf functionality in programs will be disabled. If you want this functionality, then please uninstall rlocate. Also, If you are using iptables, please uncomment this line in /etc/sysconfig/firewall: #-A INPUT -p udp -m udp --dport 5353 -j ACCEPT After that do not forget to restart iptables with: service firewall restart 7.7. dhcp If you are in trouble setting up your dhclient, use the following options. These are quite good defaults: request subnet-mask, broadcast-address, time-offset, \ routers, domain-name, domain-name-servers, \ host-name, netbios-name-servers, netbios-scope; timeout 20; script "/sbin/dhclient-script"; 7.8. apache 7.8.1. How to configure Apache 1. These steps require root privileges, so use su - to get a root shell. 2. The Apache server isn't started by default. You can change this with the service httpd add command. 3. We don't want to reboot, so start it manually: service httpd start Starting Apache web server (no SSL) [ OK ] You have finished if you don't need SSL support. 7.8.2. Setting up SSL support for Apache 1. Creating the certifications: # cd /etc/httpd/conf/ # sh mkcert.sh Signature Algorithm ((R)SA or (D)SA) [R]: Here we can accept the default RSA signature algorithm first. Then we have to fill out some fields. There are quite a few fields but you can leave most of them blank. If you enter '.', the field will be left blank. 1) Country Name (2 letter code) [XY]: Give the 2-letter code of our contry (for example US) 2) State or Province Name (full name) [Snake Desert]: We type our state. 3) Locality Name (eg, city) [Snake Town]: The name of our city. 4) Organization Name (eg, company) [Snake Oil, Ltd]: Our organization's name. 5) Organizational Unit Name (eg, section) [Webserver Team]: Our section's name. 6) Common Name (eg, FQDN) [www.snakeoil.com]: Important: Give a real address here, otherwise you'll get warnings in your browser! 7) Email Address (eg, `name@FQDN') [`www@snakeoil.com']: I usually give the email address of the webmaster here. (webmaster@domain.com) 8) Certificate Validity (days) [365]: In most cases, one year will be good. Then, we should choose the version of our certificate: Certificate Version (1 or 3) [3]: The default 3 will be good, so just hit enter. In the next step we can encrypt our private key: Encrypt the private key now? [Y/n]: The keys will not be readable by users, so we can leave this step out. So the following files are created: /etc/httpd/conf/ssl.key/server.key (keep this file private!) /etc/httpd/conf/ssl.crt/server.crt /etc/httpd/conf/ssl.csr/server.csr 2. Enable SSL in /etc/httpd/conf/httpd.conf: Open the file with your favorite editor, and search the followings at about line 1040: # Uncomment this if you want SSL support! # # Include /etc/httpd/conf/ssl.conf # Uncomment them. 3. Now we should restart Apache: service httpd restart 4. Then we can check if the task was successful: elinks https://localhost/ This should show the default homapage, received via SSL :) 7.9. xchat How should I remote control xmms from xchat? First make sure you really need it - some people think it's a security hole. You need [13]XChat-XMMS plugin from [14]XChat's Scripts + Plugins section, and some other packages (mostly Perl modules) which I'm too lazy to search for, but are available in fpm. Unpack the tarball, copy the .pl script to your XChat dir, and (try to) load it. If it complains about missing Perl modules, install them and try again. (This script has some minor bugs, but was found to be the most useful one amongst the kind. The documentation is a German PDF, which is to be translated to English/Hungarian.) 7.10. openttd You require the data files of the original Transport Tycoon Deluxe for Windows to play the game. You have to manually copy the following files to /usr/share/openttd/data/ sample.cat trg1r.grf trgcr.grf trghr.grf trgir.grf trgtr.grf If you want to use the included scenarios, run openttd with the following command: openttd -g openttd -g /usr/share/openttd/scenario/ 7.11. kernel-xen0 7.11.1. Usage instructions: 1. pacman -Syu && pacman -S kernel-xen0 2. Add the following lines to the bottom of /boot/grub/menu.lst title Frugalware 0.5 (Siwenna) - With Xen kernel (hd0,13)/boot/xen.gz noreboot dom0_mem=768M module (hd0,13)/boot/vmlinuz-2.6.16-xen0-fw4 ro root=/dev/hda14 Replace (hd0,13) with the grub reference to your Frugalware partition, and /dev/hda14 with the Linux device name for your partition (use the existing grub entry for frugalware as a reference). 768M should also be replaced with a value of around half of your total system memory. 3. Reboot and select the Xen option at the Grub menu. 4. Hopefully nothing bad will happen. If it does, write down the last few messages that you see, and file a bugreport at http://bugs.frugalware.org 5. If all works OK after the first few boots, you should be able to safely remove noreboot from the kernel command line. If you run into problems later and Xen reboots before you can see the error, just readd noreboot Note on i686, you need the glibc-xen package instead of the normal glibc! 7.12. ccache After you installed ccache, it won't be enabled by default. There are 3 options to enable it: 1. Use makepkg. It uses ccache if the package is installed unless you use the -B option. 2. Most package's ./configure script supports specifying a custom compiler: CC=/usr/bin/ccache ./configure should enable ccache for you. 3. Modify the PATH, this way ccache will be enabled for you till you leave the shell: export PATH=/usr/lib/ccache/bin:$PATH 7.13. php You should set cgi.fix_pathinfo=1 in /etc/php.ini in order to use php-cgi. 7.14. gcc I have heard I should never remove the gcc package. Is this still true? "No, as of Frugalware-0.3 you can safely remove the gcc package, just never remove the libstdc++ and gcc-lib packages. (Of course you may if pacman allows you to do so.)" 7.15. gspcav1 NEW!! One driver Upto 220 Webcams supported, thanks Linux :). until gspca v4l2 is finished, used: gspcav1 "Generic Softwares Package for Camera Adaptator" for kernel upto 2.6.11 7.16. pyro You'll find pyro's scripts in /usr/lib/python2.5/site-packages/Pyro/bin 7.17. eaccelerator 7.17.1. Setting up eaccelerator In order to use eAccelerator, you must add the following lines to your /etc/php.ini file: extension="extensions/no-debug-non-zts-20060613/eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" Do not forget to create the cache directory as well: mkdir /tmp/eaccelerator chmod 0777 /tmp/eaccelerator 7.17.2. Configuration Options: eaccelerator.shm_size The amount of shared memory (in megabytes) that eAccelerator will use. "0" means OS default. Default value is "0". eaccelerator.cache_dir The directory that is used for disk cache. eAccelerator stores precompiled code, session data, content and user entries here. The same data can be stored in shared memory also (for more quick access). Default value is "/tmp/eaccelerator". eaccelerator.enable Enables or disables eAccelerator. Should be "1" for enabling or "0" for disabling. Default value is "1". eaccelerator.optimizer Enables or disables internal peephole optimizer which may speed up code execution. Should be "1" for enabling or "0" for disabling. Default value is "1". eaccelerator.debug Enables or disables debug logging. Should be "1" for enabling or "0" for disabling. Default value is "0". eaccelerator.check_mtime Enables or disables PHP file modification checking . Should be "1" for enabling or "0" for disabling. You should set it to "1" if you want to recompile PHP files after modification. Default value is "1". eaccelerator.filter Determine which PHP files must be cached. You may specify the number of patterns (for example "*.php *.phtml") which specifies to cache or not to cache. If pattern starts with the character "!", it means to ignore files which are matched by the following pattern. Default value is "" that means all PHP scripts will be cached. eaccelerator.shm_max Disables putting large values into shared memory by " eaccelerator_put() " function. It indicates the largest allowed size in bytes (10240, 10K, 1M). The "0" disables the limit. Default value is "0". eaccelerator.shm_ttl When eaccelerator fails to get shared memory for new script it removes all scripts which were not accessed at last "shm_ttl" seconds from shared memory. Default value is "0" that means - don't remove any files from shared memory. eaccelerator.shm_prune_period When eaccelerator fails to get shared memory for new script it tryes to remove old script if the previous try was made more then "shm_prune_period" seconds ago. Default value is "0" that means - don't try to remove any files from shared memory. eaccelerator.shm_only Enables or disables caching of compiled scripts on disk. It has no effect on session data and content caching. Default value is "0" that means - use disk and shared memory for caching. eaccelerator.compress Enables or disables cached content compression. Default value is "1" that means enable compression. eaccelerator.compress_level Compression level used for content caching. Default value is "9" which is the maximum value eaccelerator.keys eaccelerator.sessions eaccelerator.content Determine where keys, session data and content will be cached. The possible values are: "shm_and_disk" - cache data in shared memory and on disk (default value) "shm" - cache data in shared memory or on disk if shared memory is full or data size greater then "eaccelerator.shm_max" "shm_only" - cache data in shared memory "disk_only" - cache data on disk "none" - don't cache data eAccelerator API: eaccelerator_put($key, $value, $ttl=0) puts the $value into shard memory for $ttl seconds. eaccelerator_get($key) returns the value from shared memory which was stored by eaccelerator_put() or null if it is not exists or was expired. eaccelerator_rm($key) removres the $key from shared memory eaccelerator_gc() removes all expired keys from shared memory eaccelerator_lock($lock) creates a lock with specified name. The lock can be released by function eaccelerator_unlock() or automatic on the end of request. For Example: eaccelerator_unlock($lock) release lock with specified name eaccelerator_set_session_handlers() install the eaccelerator session handlers. Since PHP 4.2.0 you can install eaccelerator session handlers in "php.ini" by "session.save_handler=eaccelerator". eaccelerator_cache_output($key, $eval_code, $ttl=0) caches the output of $eval_code in shared memory for $ttl seconds. Output can be removed from cache by calling mmcach_rm() with the same $key. For Example: eaccelerator_cache_result($key, $eval_code, $ttl=0) caches the result of $eval_code in shared memory for $ttl seconds. Result can be removed from cache by calling mmcach_rm() with the same $key. For Example: eaccelerator_cache_page($key, $ttl=0) caches the full page for $ttl seconds. For Example: eaccelerator_rm_page($key) removes the page which was cached by eaccelerator_cache_page() with the same $key from cache eaccelerator_encode($filename) returns the encoded bytecode of compiled file $filename eaccelerator_load($code) loads script which was encoded by eaccelerator_encode() 7.18. scratchbox You need to run /usr/lib/scratchbox/run_me_first.sh to complete the install. Do not forget to create a scratchbox user: /usr/lib/scratchbox/sbin/sbox_adduser For further documentation about how to setup scratchbox for your development needs have a look at [15]scratchbox documentation. Also note that when you reboot you should run: service scratchbox start before trying to run scratchbox. You can also add it to the default runlevel: service scratchbox add Type /usr/lib/scratchbox/login to start scratchbox. Note In order to run scratchbox, you have to be in the sbox group. 7.19. foo2zjs This driver is under constant change, therefore no "stable" branch exists. Also, communications with the author led nowhere, that might explain some weirdness of building it, getting the latest stable version number etc. [16]Mail 7.20. dazuko If you got errors saying: dazuko: failed to register then you need to do: rmmod capability modprobe dazuko modprobe capability It will work. 7.21. src If you got errors that says: dazuko: failed to register then you need to do: rmmod capability modprobe dazuko modprobe capability It will works. 7.22. kexec-tools Warning kexec works just like reboot, so please save your data before using it! Loading the new kernel: kexec -l /boot/vmlinuz-2.6.18-fw1 --append="ro root=/dev/hda3 quiet vga=792 resu me=/dev/hda2" Booting it: kexec -e 7.23. cryptsetup-luks Follow these steps to when using cryptsetup-luks: 7.23.1. Creating 1. cryptsetup luksFormat /dev/partition 2. cryptsetup luksOpen /dev/partition label 3. mke2fs -j /dev/mapper/label 4. mount /dev/mapper/label /mnt/label 7.23.2. Mounting Of course later you don't have to use lunkFormat and mke2fs: 1. cryptsetup luksOpen /dev/partition label 2. mount /dev/mapper/label /mnt/label 7.23.3. Umounting 1. umount /mnt/label 2. cryptsetup luksClose label Really simple :-) 7.24. acoc In order to use acoc you should start it with acoc for example, or you can create an alias like this: alias pacman='acoc pacman' 7.25. monit You can set up Monit by adding these lines to /etc/inittab: # Run monit in standard run-levels mo:2345:respawn:/usr/sbin/monit -Ic /etc/monit/monitrc 7.26. cpuspeed After installing cpuspeed, make sure you edit the configuration file before starting it. The configuration file is located in /etc/cpuspeed.conf. Set the correct CPUFreq driver name in the confiuration file by setting the DRIVER value. for eg: if you want to use the p4-clockmod driver, your cpuspeed configuration file should contain: DRIVER="p4-clockmod" For a list of drivers, check this directory /lib/modules/your_kernel_version/kernel/arch/i386/kernel/cpu/cpufreq 7.27. nessus-core Install script has generated default certificate use: /usr/sbin/nessus-mkcert if you need to make a personalized one. Remember to create a user with: /usr/sbin/nessus-adduser Use /etc/sysconfig/nessusd for setting nessusd starting arguments. 7.28. lirc After installing lirc you need to take the following steps: 1. Find a lird.conf for your remote control on [17]remotes You can also take a look on /usr/share/remotes directory if you do not have an internet connection. If you do not find your remote controller, try irrecord myremote command. 2. Copy your lircd.conf to /etc/ directory as root. 3. Add evdev to /etc/sysconfig/modules. 4. Load the module with modprobe evdev. 5. Edit /etc/sysconfig/lirc if necessary. cat /proc/bus/input/devices |grep -e N -e H will show you the event# you should use. (Default is 2.) 6. Start lircd and lircmd with sudo service lirc start. 7.29. unp unp is a small perl script which makes extraction of any archive files easier. It support several compressors and archiver programs, chooses the right one(s) automatically and extracts one or more files in one go. It detects the right type from the file extensions or the "file" output. unp was written by Andre Karwath (http://www.aka-online.de) in 1997, I (Eduard Bloch ) found it later and improved it to fill my needs. Have fun! 7.30. mailman There is no any kind of http server in mailman's depends. It's because they are not needed to get a working mailman. Of cource if you want to provide archives and so don't forget to install a http server. 7.31. festival To test festival, try: echo "Frugalware can speak" | festival --tts 7.31.1. To test it with kttsd: 1. Start KTTSD (if not already running): kttsd 2. Send "Frugalware can speak" to KTTSD for speaking in English: dcop kttsd KSpeech setText "Frugalware can speak" "en" 3. Speak the text: dcop kttsd KSpeech startText 0 7.32. lmsensors Lmsensors is a hardware monitoring tool which is able to read thermal and voltage values and fan speeds from the sensor chips of your motherboard. Before running sensors you have to run sensors-detect as root to initialize them. It will autodetect your hardware and define which kernel modules you need to get it working properly, and tell you how to autoload them during boot. So if you want to use lmsensors try to run sensors-detect then say YES at end of sensors-detect to write /etc/sysconfig/lm_sensors for generate lm_sensors. Then issue: service lmsensors start 7.33. bcm43xx-fwcutter Since version 2.6.17, the bcm43xx driver is part of the kernel. The module should be loaded automatically, in case it isn't, you can load it manually: # modprobe bcm43xx You must bring the device up with ifconfig before doing any other configuration steps. # ifconfig ethX up Since the channel must be set manually, first do a scan: # iwlist ethX scan Then you can set it: # iwconfig ethX channel Y Finally set your essid: # iwconfig ethX essid "myessid" Ready! 7.34. fudforum After installing this package, please run /usr/bin/fudforumsetup as root to setup FUDforum 7.35. phpbb After installing this package, please run /usr/bin/phpbbsetup as root to setup phpBB After upgrading, make sure to run the database update script 7.36. squirrelmail Please start the configure script in the /var/www/squirrelmail directory! 7.37. sugarcrm In order to use the sugarcrm, you have to symlink it to somewhere. For example, if you want to use it under http://localhost/sugarcrm, then use: ln -s /var/www/SugarSuite /var/www/html/sugarcrm After installing this package, please run in a browser http://localhost/sugarcrm/install.php to setup SugarSuite (sugarcrm). 7.38. httpircproxy Don't forget to open port 8080 on your firewall! To do this, add the following two lines to your /etc/sysconfig/firewall: # httpircproxy -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT for example after MySQL's entry. 7.39. mb2md How to convert each users mbox from /var/mail to Maildir (under /home/$user)? If you are too lazy to read the documentaion :) cd /var/mail for i in * do echo $i su - $i -c "/home/vmiklos/bin/mb2md -m" rm -v $i done 7.40. ndiswrapper Ndiswrapper requires .inf and .sys files from a Windows(tm) driver to function. Download these to /root for example, then run: ndiswrapper -i /root/foo.inf After that you can delete them. They will be copied to the proper location. Once done, please run: depmod -a Check this [18]list of drivers. You can get your possible hadware with: lspci -n | egrep 'Class (0280|0200):' | cut -d' ' -f4 Look for that on the above page for your driver. Please have a look at the [19]wiki for the FAQ, HowTos, Tips, Configuration, and installation information. 7.41. rss2email 7.41.1. Configure: Create a new feed database: r2e new you@yourdomain.com Subscribe to some feeds: r2e add http://www.aaronsw.com/2002/rss2email/updates.rss (That's the feed to be notified when there's a new version of rss2email.) Repeat this for each feed you want to subscribe to. When you run rss2email, it emails you about every story it hasn't seen before. But the first time you run it, that will be every story. To avoid this, you can ask rss2email not to send you any stories the first time you run it: r2e run --no-send Then later, you can ask it to email you new stories: r2e run You probably want to set this up as a cron job or something. 7.41.2. Customize: There are a few options, described at the top of rss2email.py. If you want to change something, add it to config.py. For example, to be notified every time a post changes, instead of just once per post: echo "TRUST_GUID = 0" >>~/.rss2email/config.py And you can ask rss2email to make the emails look as if they were sent when the item was actually posted: echo "DATE_HEADER = 1" >>~/.rss2email/config.py 7.42. joomla After installing this package, please run /usr/bin/joomlasetup as root to setup Joomla 7.43. mediawiki After installing this package, please run /usr/bin/mediawikisetup as root to setup MediaWiki 7.44. speedtouch Driver for the SpeedTouch USB and SpeedTouch 330 The binaries (modem_run and pppoax) have been installed in /usr/sbin. You will find the documentation and example script files in: /usr/share/doc/speedtouch-pkgver You can start configuring your modem by running /usr/bin/speedtouch-setup Note Read the documentation (/usr/share/doc/speedtouch-pkgver/howto) carefully to use this driver correctly! 7.45. ddclient Please configure /etc/ddclient/ddclient.conf before running ddclient! Samples for common configurations can be found in: /usr/share/doc/ddclient-$package_version/sample* Additional details and instructions can be found in: /usr/share/doc/ddclient-$package_version/README Once you have finished configuring the ddclient.conf file, you can start ddclient as a daemon by running: service ddclient start 7.46. pptpd 1. Preface I was asked to set up VPN using PPTP. A much secure way to setup it up is using IPSec, more details here: [20]here. Also you could use ssh+pppd, but that's rather problematic on platforms other than Unix. 2. Setting up the server The big problem here is that most outdated HOWTO starts with patching your kernel and ppp. This is no longer needed! Requiements: You need kernel>=2.6.15 or newer (Frugalware 0.4 or higher is OK). Also you need ppp>=2.4.2. Also probably these are already installed on your system, let's see the new package: pptpd. Install it with the usual pacman -Sy pptpd Probably this is done if you're reading this HOWTO :-) Here comes my /etc/pptp.conf: $ grep -v '^\(#\|$\)' /etc/pptpd.conf option /etc/ppp/options.pptpd logwtmp localip 10.0.0.88 remoteip 10.0.0.89-127 10.0.0.88 is the internal address of the server, 10.0.0.89-127 is the range that can be used by the pptp clients. Then let's see that referred /etc/ppp/options.pptpd: $ grep -v '^\(#\|$\)' /etc/ppp/options.pptpd name pptpd domain nemesis.example.net refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 proxyarp debug lock nobsdcomp novj novjccomp nologfd nemesis.example.net is the full name of the machine, replace it to your one. After everything works fine, you can remove the "debug" line from the config. Then add at least one user: # cat /etc/ppp/chap-secrets Password: vmiklos pptpd "secret" * The rest is about to allow pptp on the firewall (I'm assuming that you use the default Frugalware configuration: INPUT is on DROP by default, but FORWARD is allowed, OUTPUT too.) Add the following 2 lines to the filter section of /etc/sysconfig/firewall: -A INPUT -p gre -j ACCEPT -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT Now we're ready to start: pptpd -f -o /etc/ppp/options.pptpd If no error messages are reported, omit the -f option so it will go background. Later you can put this to your /etc/rc.d/rc.local. Debug messages will appear in /var/log/messages if you're interested in them. 3. Client side Install the necessary "pptp" package: pacman -Sy pptp Most howto suggets the pptpconfig (http://pptpclient.sourceforge.net/) tool, it's written in PHP and uses GTK+2. You don't want to use graphical tools locally (and install XOrg) for administrating your machine, do you? We can do it by hand, not too complicated. You can name every tunnel you create, I'll use here the "mytunnel" name. Fire up your favorite editor and create the /etc/ppp/peers/mytunnel file with the following contents: $ grep -v '^\(#\|$\)' /etc/ppp/peers/mytunnel name vmiklos remotename PPTP file /etc/ppp/options.pptp pty "pptp IP_OF_THE_SERVER --nolaunchpppd " require-mppe Your /etc/ppp/chap-secrets should contain the following line: vmiklos PPTP secret * We're ready to start the client: pppd pty 'pptp server --nolaunchpppd' call mytunnel debug dump logfd 2 nodetach A lot of debug messages will be printed, check on an other console if you got a new pppx interface or not: # ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:10.0.0.89 P-t-P:10.0.0.88 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:996 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:70 (70.0 b) TX bytes:76 (76.0 b) If it seems to be ok, you no longer need the debug messages and pppd can go backround: pppd pty 'pptp server --nolaunchpppd' call mytunnel That was all. Not so simple but anyone can do it :-) 4. Resources + http://czeh.hu/linuxdoc/vpn-pptp.html - VPN connection using PPTP and Linux by Istvan Czeh (Hungarian) + http://webb.gotdns.com:2080/kernel-mppe/pptp-command.html - pptp-command HOWTO 7.47. postfixadmin This package relies on correct install of postfix's virtual tables and it needs to be configured by hand before usage. Copy /var/www/postfixadmin/config.inc.php.sample to /var/www/postfixadmin/config.inc.php and edit it to your taste. Below is an excerpt from upstream's INSTALL.TXT. 1. Create the Database Tables In DATABASE_MYSQL.TXT you can find the table structure for MySQL that you need in order to configure Postfix Admin and Postfix in general to work with Virtual Domains and Users. In DATABASE_PGSQL.TXT you can find the table structure for PostgreSQL. 2. Configure Check the config.inc.php file. There you can specify settings that are relevant to your setup. Postfix Admin contains 3 views of administration. There is the Site Admin view, located at http://domain.tld/postfixadmin/admin/. There is the Domain Admin view, located at http://domain.tld/postfixadmin/. And there is the User Admin View, located at http://domain.tld/postfixadmin/users/. In order to do the initial configuration you have to go to the Site Admin view. The default password for the Site Admin view of Postfix Admin is admin/admin. This is specified in the .htpasswd file in the /admin directory. Make sure that the location of the .htpasswd file matches your path. When you have finished, you have to restart apache (service httpd restart) in order to be able to authenticate the master admin. If you fail to do this, anybody will be able to do anything as postfixadmin's administrator without any authentication. 7.48. drupal After installing this package, please run /usr/bin/drupalsetup as root to setup Drupal 7.49. midpssh-http-server Do not forget to open port 8080 on your firewall! To do this, add the following two lines to your /etc/sysconfig/firewall: # midpssh-http-server -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT for example after MySQL's entry. 7.50. xcache 7.50.1. Installing As PHP Extension? 1. Check /etc/php.ini cat /usr/share/doc/xcache-$pkgver/xcache.ini >> /etc/php.ini 2. Modify php.ini for your needs: $EDITOR /etc/php.ini 3. Restart php Warning Use >> with cat, not simply > Please take a look on [21]xcache wiki. 7.51. entrance If your keyboard doesn't work that can be because wrong virtual terminal number set in entrance config. Use the following command to set the proper value: sudo ecore_config -c /etc/entrance_config.cfg -k /entranced/xserver -s "/usr/X11 R6/bin/X -quiet -nolisten tcp vt7" In this example you want to run entrance on vt7. 7.52. fglrx If hardware acceleration does not work make sure you have something similar in /etc/fstab: tmpfs /dev/shm tmpfs defaults 0 0 If xv output doesn't work in mplayer add the following line to /etx/X11/xorg.conf's Device section: Option "VideoOverlay" "on" On the following page you can find some useful solutions for different fglrx problems: [22]Thinkwiki fglrx. 7.53. synaptics First of all, read the INSTALL file for the instructions. For lazy users, here's what i had to do to get the driver working: 1. Make sure you have the evdev kernel module loaded before the x server started (or restart it after you loaded the module). 2. Now open your /etc/X11/xorg.conf and add the following: Load "synaptics" to the "Module" section. 3. Replace the content of your "InputDevice" section to the followings: Section "InputDevice" Identifier "Synaptics Mouse" Driver "synaptics" Option "Device" "/dev/psaux" Option "Protocol" "auto-dev" Option "LeftEdge" "1700" Option "RightEdge" "5300" Option "TopEdge" "1700" Option "BottomEdge" "4200" Option "FingerLow" "25" Option "FingerHigh" "30" Option "MaxTapTime" "180" Option "MaxTapMove" "220" Option "VertScrollDelta" "100" Option "MinSpeed" "0.09" Option "MaxSpeed" "0.18" Option "AccelFactor" "0.0015" Option "SHMConfig" "on" # Option "Repeater" "/dev/ps2mouse" EndSection 4. Add this line to the "ServerLayout" Section: InputDevice "Synaptics Mouse" "CorePointer" 7.54. xgl 7.54.1. Introduction 1. Xgl server Xgl is a new hardware accelerated X server. Although it is still in development, It's found OK for day-to-day use. It's especially good for Gnome and Xfce users who want a bit of Mac OS X-like eye-candy. 2. Compiz Compiz is a new window manager that has been specifically designed to be used with Xgl. Unfortunately, if you are a KDE user, this will not work for you (yet). Compiz provides some great effects demonstrated in the images/movies below. 7.54.2. See it in action 1. Screenshots + Desktop switcher cube: http://frugalware.org/~alex/xgl/cube.png + Scale, the Expose-like window switcher: http://frugalware.org/~alex/xgl/expose.png + Translucency effects: http://frugalware.org/~alex/xgl/translucency.png + More translucency effects: http://frugalware.org/~alex/xgl/moretranslucency.png + Translucency with Scale http://frugalware.org/~alex/xgl/translucexpose.png + Alt+Tab replacement: http://frugalware.org/~alex/xgl/switcher.png + Wobbling windows: http://frugalware.org/~alex/xgl/wobble.png 2. Movies We currently have 2 movies of Xgl in action. We may add more in the future. Note that these movies may jump or skip bits, as they were filmed on my trusty 700Mhz Pentium 3 :) + Demo 1 (1024x768, 4.9MB, AVI format): http://frugalware.org/~alex/xgl/video1.avi + Demo 2 (1024x768, 6.4MB, AVI format): http://frugalware.org/~alex/xgl/video2.avi 7.54.3. Getting it working (for Gnome) Note that this only works for nVidia, i810 and ATI users currently! nVidia users, please make sure that you have the nVidia binary drivers set up and working correctly (pacman -Sy nvidia) Fire up your Gnome Terminal, Xterm, Linux Console, or whatever. Do su - Enter your root password, then run: pacman -Sy mesa-cvs xgl compiz-cvs Now run: fw-xgl-control --enable Now you can reboot (or run gdm-restart as root, for advanced users), and hopefully you will be running on a nice fancy desktop :) 7.54.4. Getting it working (for KDE) Note that this only works for nVidia, i810 and ATI users currently! nVidia users, please make sure that you have the nVidia binary drivers set up and working correctly (pacman -Sy nvidia) Fire up your Konsole, Xterm, Linux Console, or whatever. Do su - Enter your root password, then run: pacman -Sy xgl kicker-compiz taskbar-compiz beryl beryl-manager beryl-plugins \ beryl-dbus beryl-settings emerald emerald-themes Now run: fw-xgl-control --enable Now you can reboot (or restart KDM, for advanced users), and hopefully you will be running on a nice fancy desktop :) 7.54.5. Extra resources * [23]SuSE Xgl page * [24]Gentoo Wiki HOWTO - Contains usage info for all the effects 7.55. xpenguinsapplet If no penguins appear on your desktop after you hit the launch button, go in KDE Control Center -> LookNFeel -> Behavior and make sure Allow programs in desktop window is checked. 7.56. kvpnc Howto setup KVpnc for use without root password - sudo 1. Install sudo 2. Edit /etc/sudoers: add an command alias # Cmnd alias specification Cmnd_Alias KVPNC = /usr/bin/kvpnc # User privilege specification ALL ALL=NOPASSWD:KVPNC Warning Do it gently! (As always, when you edit /etc/sudoers.) 7.57. kiax If you want to test this package, you can use for example the server of [25]VoipBuster. First, you should register a user name and password with their native (Windows-only) client. After that give iax.voipbuster.com as the server and your just registered username and password. Now you should able to dial (currently the first minute is for free). 7.58. freenx 1. Installation On the server: pacman -Sy freenx On the client: pacman -Sy knx 2. Configuration On the server setup a fake password for the nx user: passwd nx Now allow the client to connect to the server by copying the file /usr/NX/home/nx/id_dsa from the server to /usr/share/knx/client.id_dsa.key on the client. Also make sure about it's readable by users: chmod 644 /usr/share/knx/client.id_dsa.key Also don't forget to allow incoming ssh connections (by default port 22) in /etc/sysconfig/firwall, then load the config with the service firewall restart command. 3. Users By default shell accounts are not allowed to connect to th nx server, you can allow a user to do so by nxserver --adduser then set a separate (for nx) password for the user: nxserver --passwd 4. The client Now start knx, the usage of that application is self-explaining. 7.59. maxima Install the tk package if you intend to use the gui "xmaxima". Detailed documentation can be found using * info maxima * in the directory /usr/share/maxima/$package_version/doc/ 7.60. wifi-radar Don't forget to change the wifi interface name in /etc/wifi_radar.conf! 7.61. cairo-clock Cairo-Clock requires the Composite option to be enabled in your Xorg configuration. To enable it, add the following lines to /etc/X11/xorg.conf: Section "Extensions" Option "Composite" "Enable" EndSection 7.62. nessus-core-gtk Install script has generated default certificate use: /usr/sbin/nessus-mkcert if you need to make a personalized one. Remember to create a user with: /usr/sbin/nessus-adduser Use /etc/sysconfig/nessusd for setting nessusd starting arguments. 7.63. ooextras Please add /usr/lib/ooextras to your template paths in OpenOffice.org! You can do this under: Tools > Options > OpenOffice.org > Paths Enjoy the new templates! :-) 7.64. dillo Dillo is moving to FLTK2. As of 2006-04-29 it is unstable (both unreleased and has some random erratic bugs, but upstream is working on it), and some KDE stuff has fltk dep, so not a good idea to mess with. Dillo is now "crippled" by removing the new FLTK based download GUI, as it is only this needs FLTK2, but for the next release more FLTK2 expected. 7.65. qemu QuickStart for lazy users aka. "I am new to qemu and I want to use it, help!" :) qemu-img create foo.img 8G wget bar.iso qemu -hda foo.img -cdrom bar.iso 7.66. src QuickStart for lazy users aka. "I am new to qemu and I want to use it, help!" :) qemu-img create foo.img 8G wget bar.iso qemu -hda foo.img -cdrom bar.iso 7.67. mythtv You can configure MythTV this way: 1. Start mysql service and setup mysql database password with mysqladmin -u root password mysqlpassword. 2. Set up the initial database with mysql -u root -p < /usr/share/mythtv/mc.sql and enter mysqlpassword. 3. Run sudo mythtv-setup for tune your tvcard. 4. Start mythtv backend with sudo service mythtv start. 5. Use mythfilldatabase to fill in your database. 6. Finally run mythfrontend and have fun! For more information see MythTV [26]documentation. 7.68. xen Warning Xen is unstable software, meaning that it should not be used on your main PC, it may destroy your data. As an example, I destroyed my file system during testing. 7.69. jacman Jacman needs a /etc/pacman.conf with some modifications. Here an example of the original /etc/pacman.conf: Include = /etc/pacman.d/frugalware-current If you want to work with jacman you must change this lines to: # -current [frugalware-current] Include = /etc/pacman.d/frugalware-current This changes have not any effect to pacman. But for jacman these are necessary. 7.70. motion You should edit the settings: videodevice, input, norm, frequency, width, height and target_dir in /etc/motion.conf If the file already exists, it wont be overwritten by the package while upgrading. You can refer /etc/motion-dist.conf for configuring motion. 7.71. firestarter This version comes with a system init script now. You have to run the firestarter executable from the command line (in an X driven console) first to generate the initial start-up scripts. To add it to startup, run this: chkconfig --del rc.firewall chkconfig --add rc.firestarter To remove it from startup: chkconfig --del rc.firestarter chkconfig --add rc.firewall 8. IRC Rules 8.1. Introduction This document describes the rules to be followed by and user and/or developer who join to the user and/or development channel of Frugalware Linux. 8.2. Welcome You have joined us on IRC, to get help or to give support to other Frugalware users. We're sure you have made a good decision :) This document details a few basic rules that should be followed on IRC. The rules are here so that anyone can read them. 8.3. Official This means that if you are a developer and have time to join us on IRC, then you should join there, too. Users don't have the right to speak on the development channel so the only way to talk with developers if you join there. Please do so. 8.4. Frugalware The topic of the channel is the Frugalware Linux distribution. You may talk about other distributions or other topics, but don't expect that others are familiar with them. For example the following question: How can i set up my network to work like it under Gentoo? is a bit strange, since it's possible that not everyone used Gentoo and therefore it's possible that we won't be able to help. Instead of that just describe what you want, like: Is it possible to use network profiles so that I can change all my settings with one command when i get home from my workplace? 8.5. Read the linked documentation Documentation is written by the developers to save time, once they spent a lot of time with writing it and then they expect that you read it first before asking, or at least when you get a link to the answer, you are expected to read it before asking again. Really. Please do it, and don't be lazy. 8.6. English The language of the channel is English. Please don't use other languages so that everyone will understand what you say. There are Hungarian and French channels named #frugalware.hu and #frugalware.fr. Feel free to inform us if there are other non-English channels. 8.7. Paste The speed of IRC is slow. If you want to copy-and-paste big amount of data (typically more than 5 lines), then please use our Pastebin, which is available at http://frugalware.org/paste. 8.8. I'm new to Frugalware and... You have general questions, since you're about to install Frugalware for the first time, but first you would like to get some of your questions answered. No problem, but first please read the about page, you can reach it here: http://frugalware.org/about 8.9. Is mxw_ a bot? Yes, it is. It informs users about new binary packages, manages rights on the channel and so on. If you want a new feature to be implemented then feel free to request it at http://bugs.frugalware.org/. 8.10. Bouncers, leaving your client online when you're away That's not a problem, but please keep in mind the followings: if you are away then you should be able to read back the lines when you were highlighted. If this is not possible then it's better to quit from the channels, since we think that we're talking to you while we're talking with /dev/null. Also if you're online and you have been highlighted and asked, please try to answer. If you have no time, then a simple alex: i don't have time atm to answer, sorry is enough. So that he won't wait for your answer. 8.11. Private messaging Please do not /msg users unless you asked about it and you're allowed. This is a support channel: you ask in the channel and who have time / knowledge to answer, he/she will. That the fastest way, beleive us. You should also know that some of us (voroskoi, vmiklos, maybe others too) set up their clients to ignore msgs on freenode, so you talk to /dev/null when you /msg to us. 8.12. Offtopic Talking about non-Frugalware topics (or even non-Linux) is okay, as long as this doesn't prevent others from talking about Frugalware. We are a community, maybe you want to share other ideas, but don't make it impossible for other to get help. 8.13. Logging This is not a secret, the channel is logged and public, the logs are linked from the homepage, and the main goal: Google searches in them. If you hate this, then the best is not to join ;-) 9. Creating new packages 9.1. Introduction Frugalware consists of thousands of packages. Each files in the distribution belong to some package. You can easily query which package does the specified file belong to. If you want to know which package contains /etc/frugalware-release, you should use: $ pacman-g2 -Qo /etc/frugalware-release /etc/frugalware-release is owned by frugalware 0.6rc1-1 If you browse the FST (Frugalware Source Tree), you can see, that in the source directory there are category and category-extra dirs. The dirs without -extra tag contains the basic packages of the given category and the dependencies of the basic packages. So a package in these directories can not depend on a package in extra directories. The same true for console/graphical applications: if your applications/library is graphical, then use xapps/xlib, if not then use apps/lib. For each task there is a default package. For example postfix is our default MTA, so exim, sendmail, etc must be in some extra dir. The repo has a source and a binary directory. The frugalware repo's directories are source/ and frugalware-$arch/. The binary packages are in the binary directory of the repo. The sources of packages are a little bit more complex. Each package has a category, and each category and package has its own directory in the source dir. Let's see an example. You are searching for the cabextract package. The binary package is named frugalware-/cabextract---.fpm and its source is placed in the source/apps/cabextract dir. In the package's own dir, we store everything required to compile the package. You may say we should store only the patches and so, but in our opinion, it's very annoying when you want to recompile a package and the original server is slow or even unreachable, due to some other reasons. Also it may be illegal that we would provide only binary packages without storing the source (since then it may be possible that we are not able to send the source to you even if you ask us by mail). Besides, there is a FrugalBuild file in each package's source directory. This is a simple bash shell script, that will be included by makepkg. So in the FrugalBuild script you can use everything that can be used in a shell script. Note During the package database generation we source all the FrugalBuilds, so it must be a very short time to do so for each FrugalBuild. Because of this, you should not use something like: sha1sums=(`lynx -dump http://foo.com/bar.sha1`) but you should use: # http://foo.com/bar.sha1 sha1sums=('094e3afb2fe8dfe82f63731cdcd3b999f4856cff') This way gensync will be fast even if reaching foo.com takes a lot of time. Also using the -u option an offline build is possible. Briefly, packaging means collecting the sources, adding additional files (for example init scripts or config files) and writing the FrugalBuild script. 9.2. Recompiling packages Before creating a new package, first we will recompile an existing package in this howto. It's very simple. In our example we will recompile the mplayer package. First, you have to download the current FST: repoman upd, as root. Or, as a regular user, copy edit ~/.repoman.conf, and add the fst_root dir in it (by default, it would download the files to /var/fst, and it is not writable as a user, of course) and issue repoman upd. Before building the chroot environment, you should make sure about that the fst user exists on your system. Check your /etc/passwd file. If not, then please check your /etc/passwd.pacnew file, that contains the relevant entry, just copy that line to /etc/passwd. Now that you have the fst user, continue with $ cd $fst_root/source/xapps/mplayer $ sudo makepkg First we enter the directory of mplayer then (like make and Makefile ) we run makepkg that will build the package according to the parameters described in FrugalBuild. We used use the -R option to build the package in a chroot-ed environment. Since 0.5 building in chroot is the default methot, you have to use -H if you want to build on the host system. Chroot requires root privileges. To allow group (for example the devels group) to use sudo makepkg, start visudo as root, and add the following line: %devels ALL=NOPASSWD:/usr/bin/makepkg The chroot will be placed by default in /var/chroot. Only one package can be built in a chroot at a time, so maybe you'll want to specify a separate chroot for each user. In order to do this, set the $CHROOTDIR variable in your /etc/makepkg.conf from: export CHROOTDIR="/var/chroot" to export CHROOTDIR="/var/chroot.`echo $HOME|sed 's|.*/\(.*\)$|\1|'"` This way the one parallel build / one system limit is increased to one parallel build / one user. (See man makepkg for more info about the benefits of building in a chroot). In the next section we will see an example for a simple FrugalBuild script. 9.3. A simple example Let's see a simple example, the FrugalBuild script of the cabextract package. # Compiling Time: 0.06 SBU # Maintainer: VMiklos pkgname=cabextract pkgver=1.2 pkgrel=1 pkgdesc="a program to extract Microsoft Cabinet files" url="http://www.kyz.uklinux.net/cabextract.php" depends=('glibc') groups=('apps') archs=('i686' 'x86_64') up2date="lynx -dump http://www.kyz.uklinux.net/cabextract.php |grep 'cabextract \ source code'|tr -s ' '|cut -d ' ' -f 6" source=(http://www.kyz.uklinux.net/downloads/$pkgname-$pkgver.tar.gz) sha1sums=('871b3db4bc2629eb5726659c147aecea1af6a6d0') # optimization OK And here comes the description for each line: # Compiling Time: 0.06 SBU You should write here how much time did it take to build the package. Of course, it depends on your hardware, so we use SBUs instead of minutes as a unit. SBU is the Static Binutils Unit, which means the time repoman merge binutils takes on your machine. By default makepkg will print out how many seconds the build took. After you built binutils, you should update your /etc/makepkg.conf: SBU="257" The line above means compiling binutils on your machine took 257 seconds. From this point, makepkg will print out SBUs instead of seconds after successful builds, and this SBU value will be equal on anyone's machine. # Maintainer: VMiklos If you are the maintainer of the package, write your name or nick and e-mail address here. If you probably you won't maintain the package, write Contributor instead of Maintainer, and then the Maintainer will add his/her line later. A package may have only one contributor: the first person who wrote FrugalBuild for it. The maintainer is the current maintainer. The other names should not be included in the FrugalBuild, anyone can use the version control features to look for them. pkgname=cabextract This will be the name of the package. It's allowed to include numbers, hyphens (-), etc., and should be lowercase. pkgver=1.2 The package's version. Hyphens are not allowed, so a 1.0-6111 will be usually converted to 1.0_6111. pkgrel=1 Release number marks Frugalware-specific changes. If you recompile a package, you should increase this number. If you upgrade to a newer version, don't forget to reset this number back to 1. If you design a new package, set this to 1. pkgdesc="a program to extract Microsoft Cabinet files" A short one-line description for the package. Usually taken from the project's homepage or manpage. url="http://www.kyz.uklinux.net/cabextract.php" The website of the project. depends=('glibc') List of dependencies of the package, defined in a bash array. Usually you should compile a package at least two times: first with depends=(), then you should run chkdep -p foo.fpm that will suggest the dependencies, but handle that information with caution! Reading the README, INSTALL and configure.ac files is also a good idea to find out dependencies. groups=('apps') It is needed to know where, in which category the package belongs. The most important thing: don't put your package in apps, base, devel, lib, multimedia or network, if it depends on X (or on a pkg depending on X, of course). Packages in the extra repository get the -extra suffix to the group name. archs=('i686' 'x86_64') This array defines for which architectures the given package is available. If it's not available, it means that gensync will skip it when generating package databases. If you are not able to provide a binary package for a given arch, don't include that in archs()! For example, no matter if the package could be compiled in x86_64, if you haven't compiled it ourself, don't include it. up2date="lynx -dump http://www.kyz.uklinux.net/cabextract.php |grep 'cabextract \ source code' |sed 's/.*-\(.*\).t.*/\1/'" A short command that will give us the latest stable version of the package. This helps maintainers to keep the FST up to date. Usually this string consists of three parts: a lynx -dump someurl, a grep foo, and a sed command. We use the http protocol if possible, but sometimes we have to use ftp. In that case instead of lynx -dump you should use wget -O - -q. Of course, you could use wget all the time, but lynx is simpler. The sed command could be replaced with the combination of tr and cut if you prefer them instead of sed. The example used above would be the following with cut and tr: up2date="lynx -dump http://www.kyz.uklinux.net/cabextract.php |grep \ 'cabextractsource code'|tr -s ' '|cut -d ' ' -f 6" source=(http://www.kyz.uklinux.net/downloads/$pkgname-$pkgver.tar.gz) Here you define the sources of the package in a bash array. You can use simple filenames for patches, or additional files when you place them in the same directory where the FrugalBuild script is. You can use URLs if you want makepkg to download them automatically. It's important to place all sources in the package's directory including the source files that you can download from a site. Also when dowloading from sourceforge, please use Finclude sourceforge! If you use various random patches from unknown sources, don't expect that somebody else will port those patches to a newer version. You will have to do the work yourself. You have been warned! Actually try to avoid patches unless they are really necessary (eg: secfix, bugfix). sha1sums=('094e3afb2fe8dfe82f63731cdcd3b999f4856cff') Another bash array to prevent compiling from wrong sources. Of course this is useless if you just run sha1sum foo.tar.gz after download. Try fetching original sha1sums from the projects website, if possible. It's a good idea to leave a comment above this line about where to find these sha1sums. As you can see there in no build() function in this FB. It's because we have wrote some F* functions to make our work easier. It's somethin similar you can see in gentoo for example. These functions can be found in source/include/util.sh file inside the FST. An empty build actually means: build() { Fpatchall Fmake "$@" Fmakeinstall if echo ${source[@]}|grep -q README.Frugalware; then Fdoc README.Frugalware fi } So Fpatchall will apply all the patches in source() array, then Fmake calls the configure script and make command, then Fmakeinstall acts like make install, finally if a README.Frugalware file is given it will also add that to the package. For details see the utils.sh file, it's well documented. Note You don't have to use these F* commands, but we highly recommend it. Also if you use simple commands do not forget to add || return 1 after each command, so the build will stop on error! # optimization OK This line will be added automatically to the end of the FrugalBuild if the build() function used your $CFLAGS or $CXXFLAGS. This is handy if you want to cross-compile on a faster machine for a slower architecture. Until the package doesn't use our $CFLAGS we can't cross-compile it, so please try to avoid creating "unoptimized" packages. If the package doesn't contain any architecture-dependent file, then you can add this line manually as makepkg will not detect this. 9.4. Full reference Now here is a full list of directives available. First, let's start with the install directive. Here you can refer to an install file (usually $pkgname.install) to use. If there is a $pkgname.install in the FrugalBuild's directory, it will be used automatically. In the install file, you can define actions to be executed before/after installing/upgrading/removing the package. A skeleton of this file can be found under /docs/skel in FST. Of course, you probably will not need all of these functions, just remove what you don't need. If you want to do exactly the same after upgrading as after installing, feel free to use post_install $1 in the post_upgrade() function. Save this file as $pkgname.install, thus makepkg will automatically use it. You should not specify the install script in the source array as it is not used in build(). The pkgname, pkgver, pkgrel, url, source and sha1sums directives were discussed in the previous section. The backup array is used to make some files in the package as config files. If possible, we don't modify config files during an upgrade. Example: backup=('etc/pacman.conf') Note that the leading slash is missing! For more information about this, see the handling config files section in the pacman manpage. The depends array has been discussed already, except I haven't mentioned before that the elements may include version information, for example: pkgname=kdewebdev depends=('kdelibs=3.3.0') Here you can use <>, <=, >= or = operators. The makedepends array defines packages required only in build time. For example if the source is in SRPM format, probably alien is a build-time requirement. The rodepends array defines packages required only in runtime. It must be used in any case when putting the given package to depends() would causecircular dependency. In the conflicts array, you can define a list of packages that shouldn't be installed if you want to install this package. Let's see an another example: pkgname=mutt-devel conflicts=('mutt') It is necessary as the two package almost the same, but the binaries differs. In this case the mutt package must also contain this line: conflicts=('mutt-devel'). Of course, if two or more packages conflict each other, only one of them can be placed in a non-extra group. The provides array is used to create virtual dependencies. It means both postfix and sendmail provides mta, so we can do: pkgname=mailman rodepends=('mta') The user has a choice between postfix and sendmail. The last one in this list is the replaces directive. The module-init-tools package is a good example: pkgname=module-init-tools replaces=('modutils') conflicts=('modutils') As you can see, we often make such new packages which also conflict with each other. Using the replaces directive when users use pacman -Su next time, if modutils is installed (probably :)), they will be asked to remove modutils and install module-init-tools. license=(\'GPL2\') This directive is optional. At the moment, you may add such a field, but copy the LICENSE field from the source root to the packages's documentation dir, so this isn't really necessary. 9.5. Subpackages Since 0.5 makepkg can also create subpackages. It is very useful when your package has graphical parts based on qt for example. It's a pain for gnome users as they want the package, but they do not want the qt part. So you create a subpackage for qt part and both side is happy. Let's see an example: # Compiling Time: 1.43 SBU # Maintainer: crazy pkgname=djvulibre pkgver=3.5.18 pkgrel=2 pkgdesc="DjVu is a web-centric format for distributing documents and images." depends=('libtiff' 'libjpeg') makedepends=('kdelibs' 'gnome-mime-data' 'gnome-icon-theme' 'htop') rodepends=('xdg-utils') groups=('xapps') archs=('i686' 'x86_64') options=('scriptlet') _F_sourceforge_dirname="djvu" _F_sourceforge_broken_up2date=1 Finclude sourceforge url="http://djvulibre.djvuzone.org/" source=(${source[@]} head_-n1.patch no-OPTS-FLAGS-thx.patch) subpkgs=('djview') subdescs=('DjVu viewer for qt and mozilla plugins.') subdepends=('libxi libgl qt libxmu') subrodepends=('djvulibre') subgroups=('xapps-extra') subarchs=('i686 x86_64') build() { Fcd Fpatchall Fautoreconf export CFLAGS="$CFLAGS" export CXXFLAGS="$CXXFLAGS" Fconf \ --enable-threads \ --disable-desktopfiles \ --enable-xmltools \ --enable-djview make depend || Fdie make || Fdie Fmakeinstall Fln /usr/lib/netscape/plugins/nsdejavu.so \ /usr/lib/mozilla/plugins/nsdejavu.so Fln djview3.1.gz usr/share/man/man1/djview.1 Fsplit djview usr/bin/djview Fsplit djview usr/bin/djview3 Fsplit djview usr/lib/mozilla Fsplit djview usr/lib/netscape for i in . ja; do [[ $i == . ]] && Fsplit djview usr/share/man/$i/man1/djview.1 Fsplit djview usr/share/man/$i/man1/djview3.1 Fsplit djview usr/share/man/$i/man1/nsdejavu.1 done Fsplit djview usr/share/djvu/djview3 } Here you can see the djvulibre FrugalBuild. Note subpkgs, subdescs, subdepends, subgroups and subarchs. These 5 value is lethal for a subpackage. There are other subpackage variables too of course. See man FrugalBuild for details. Also note that bash does not support two-dimensional arrays, so when defining the array of arrays, then quotes are the major separators and spaces are the minor ones. Defining the subpackage is only the first part of creating a subpackage. You have to tell makepkg which files you want to put in the subpackage. We use Fsplit command for this. First parameter is the subpackage name, second is the file you want to move. Please never use a trailing slash when defining file patterns, especially if you use wildcards in it! If you need more example just take a look on avahi FrugalBuild in network group. Note Use subpackages when they are necessary, but do not start making foo-devel, foo-common, foo-not-so-common, foo-quite-common-but-not-that-common packages :) Making too much subpackage makes maintaining too hard and simplicity is the frugal way. 9.6. Compiling the package That's fairly simple. In the package directory you should do exactly the same as described in the Recompiling packages section. If you want to contribute this package to the Frugalware project, then go to [27]BTS, open a feature request and upload each non-downloadable file (ie. FrugalBuild, install scriptlet, patches) as an attachement. Please do not forget to check your FrugalBuild with fblint command before uploading it. Fblint is available in pacman-tools package. Happy packaging! 9.7. Kernel modules A few words about kernel modules. They're special as even if you installed the correct version of the kernel (and kernel-source) package, sometimes the modules are compiled for the running kernel, so you have to check if compiling against other kernel version than the running one works or not. You can use the modinfo command for this. If crosscompiling does not work always add Fcheckkernel to the build(). So here is the list of conditions a kernel module package have to satisfy: 1) Should depend on kernel=version, where version is the version of the kernel defined in $fst_root/source/include/kernel-module.sh. (Always use up-to-date FST!) 2) Should Finclude the kernel-module scheme. 3) If you want to use a custom install script (saying running just depmod -a after the install/upgrade is not enough for you) then the install script should run depmod -a. Otherwise the scheme will provide so a scriptlet which does so. 4) build() should call Fcheckkernel to ensure the module will be compiled for the right kernel version or it should be commented if you have checked the compiling for other kernel version. It is good for out build servers as they may not run the kernel provided by the given package tree. (They can't run -stable and -current kernels at the same time :) ). 9.8. Repoman Repoman is simple tool to download all packages' buildscript and compile programs from source. The most commonly used repoman commands are the followings: repoman merge package or simply repoman m package builds a package from source and installs it. You can configure the build options in the makepkg_opts directive of /etc/repoman.conf. By default repoman will install the missing dependencies with pacman, clean up the leftover work files, install the package, and write the resulting package to the current working directory. repoman update or simply repoman upd updates FST in /var/fst (or the directory set in ~/.repoman.conf). First time repoman will download it (it may take some time!). 10. Security support 10.1. Introduction This document documents the work of the Frugalware Security Team. Primarily it's for new developers or for existing developers who started to work in the Security Team. 10.2. Handling security bugs 1. The security team opens a new task in the BTS, with a [SEC] prefix. 2. The maintainer fixes the issue in -current and decides if the issue needs fixing in -stable or not. If yes, then changes the status of the task to "Fixed in -current", otherwise closes the task. 3. If there is no patch for the issue yet, then set the status to "Researching". This indicates that you, the maintainer knows the problem, just you don't have enough resources to fix it. 4. The security team regularly searches for "Fixed in -current" bugs, fixes the issue in -stable and releases a new FSA. 10.3. How to release an FSA? 1. Check if the backport is ready (the binary packages should be uploaded for each arch). 2. Update the frugalware/xml/security.xml file in the homepage-ng repo and check if the mail is sent to the frugalware-security list. If not, then ask on -devel what can be the problem. 10.4. How to notice security issues 1. Subscribe to Secunia Security Advisories List at http://secunia.com/secunia_security_advisories/ page. This is the best place to notice issues. 2. Read the mails one-by-one and check if the advisory affects -current or -stable. 3. Open a task in BTS if necessary. Please fill in the form correctly, provide a patch if you can. You can also read other mailing list, like https://lists.grok.org.uk/mailman/listinfo/full-disclosure, but secunia monitors them, so you won't miss anything. (You just notice things later.) 10.5. How to get patches Secunia announces sec issues days after they released so there is a good chance to find a patch. 1. First of all sometimes upstream fixes it with a new version. 2. Fixed in cvs/svn/whatever and you are able to find the patch (unlike PHP) 3. If these two fails, there is http://security.ubuntu.com/ubuntu/pool. Secunia also mails you if the bug fixen in ubuntu, so steal the patch from them :) You only need the $package-$pkgver.diff.gz. There is a changelog in it, where you can find the filename of the fix. 4. It's also a good idea to take a look on redhat/gentoo bugzilla. They attach fixes most the time. So it's good to read the secunia mails carefully as you'll always know when the patch is available. 11. Handling darcs repositories 11.1. Intorduction This document is for developers, who want to publish a darcs repo on the Frugalware FTP Server and on the Frugalware Darcsweb Interface. 11.2. Location of the repo Since a repo consists of plain files, we can and should place them on the ftp server (/home/ftp). To prevent further problems, always use the server name "darcs.frugalware.org", currently it's an alias of genesis.frugalware.org. First decide if it's a personal repo or a team one. For example if you create a repo to update to a newer python version, then probably you will do all the work, create it under /pub/other/people/nick/reponame. Simply create a dir and issue "darcs init". Now anyone can "darcs get" it, using a "full mirror", for example ftp://ftp5.frugalware.org/packages/frugalware/. 11.3. Registering for the darcsweb interface If the repo is a team one, then create it under /pub/other. In this case probably you want the darcsweb interface, too. To use it: 1. Create the file _darcs/third_party/darcsweb/desc inside the repo with a short (less than 80 chars) description. 2. Create a relative symlink to /pub/other/homepage-ng/darcs/repos. After some time (max 30 mins) it should appear at http://darcs.frugalware.org/ 12. GNOME Bump HOWTO You MUST follow this HOWTO when bumping GNOME to a new version (even a minor version). To start, packages must be compiled in the order listed below (if you find a change that needs making to this list, poke AlexExtreme). If it is a major bump (2.14 to 2.16, for example), it is wise to rebuild most of the GNOME packages. 12.1. GNOME compile order * libxml2 * libxslt * gnome-common * intltool * scrollkeeper * gtk-doc * glib * libIDL * ORBit2 * libbonobo * fontconfig * Render * Xrender * cairo * Xft * pango * atk * shared-mime-info * gtk* * gtk+2-engines * gconf * desktop-file-utils * gnome-mime-data * avahi * dbus * hal * gnome-vfs * audiofile * esound * libgnome * libart_lgpl * libglade * libgnomecanvas * libbonoboui * hicolor-icon-theme * icon-naming-utils * gnome-icon-theme * gnome-keyring * libgnomeui * startup-notification * gtk-engines * gnome-themes * gnome-doc-utils * gnome-desktop * libwnck * libgpg-error * libgcrypt * libtasn1 * opencdk * gnutls * libsoup * firefox * evolution-data-server * pygobject (*) * pycairo * pygtk (*) * gnome-menus * gnome-panel * metacity * gstreamer * liboil * libxklavier * libcroco * librsvg * gail * eel * gst-plugins-base * nautilus * control-center * gnome-session * vte * gnome-terminal * libgtop * gucharmap * gnome-applets * libgsf * libgnomecups * libgnomeprint * libgnomeprintui * yelp * bug-buddy * gtksourceview * pyorbit (*) * gnome-python (*) * nautilus-cd-burner * gst-plugins-good * libmusicbrainz * iso-codes * totem * gnome-media * gnome-python-desktop (*) * gedit * eog * gconf-editor * gnome-utils * gnome-system-monitor * gnome-netstatus * gcalctool * zenity * at-spi * libgail-gnome * gnome-speech * gnome-mag * gnopernicus (missing from repo) * gok (missing from repo) * epiphany * epiphany-extensions * gob2 * gnome-games * gnome-user-docs * file-roller * gnome-nettool * vino * gnome-volume-manager * gnome-backgrounds * sound-juicer * gtkhtml * gal * pilot-link (if needed, not a gnome part) * gnome-pilot * gnome-pilot-conduits * gnome-spell * evolution * evolution-webcal * evolution-exchange * gdm * ekiga * poppler * evince * dasher * gnome-power-manager * gnome-keyring-manager * deskbar-applet * fast-user-switch-applet * gnome-screensaver * pessulus * sabayon * gnome-cups-manager (*) - don't use Fsplit on this package. Note all *sharp and all bindings need to be split 12.2. Bumping individual packages Never, i repeat, NEVER bump a version without doing the following: 1. Download the new version's tarball and extract it 2. Run ./configure --help and look in configure.in to check for new dependencies (even optional ones) and consider whether to use them or not. Consult all devels about whether it is a good idea to use the optional dependencies. 3. Check for dependencies that are no longer needed and remove them from the FrugalBuild 4. Check GConf schemas. Sometimes they have been renamed, or new ones have been added Not doing this can cause a lot of problems. 5. Check the Changelog and NEWS file for the package. Sometimes there may be API/ABI changes that need to be considered before bumping. 6. Check if _F_gnome_{scrollkeeper,mime,desktop} are needed in the new version. 7. When all this has been done, update the FrugalBuild with new sha1sums, pkgver, depends, GConf schemas and _F_gnome_* values (add gnome-scriptlet to Finclude if necessary) 8. Build the package and push. 13. Frugalware Release HOWTO 13.1. Introduction The aim of this howto is to show what's the procedure of a stable Frugalware release. The to-be-created release in this howto is 0.5, the previous release is 0.4. 13.2. A testing release Just because I don't know where to document this, here is the command line what I use to sync changes from -current to -testing before a release: rsync -avP --delete-after frugalware-current/* frugalware-testing/ 13.3. Preparing * send a mail to -devel about "please stop version and release bumps" * generate a new documentation with cd $fst/docs/texi make * sync the archs, checkpkgs shouldn't have any red pkg in it's output * run gensync to rebuild the fdbs * generate isos and test if everything is ok (ie. install from cd1-cd2 on i686, and start kde, or something) * tag the release using darcs tag 13.4. Creating the stable tree Copy the full tree on genesis: cd /home/ftp/pub/frugalware cp -av frugalware-current frugalware-0.5 13.5. Updating the -current tree Now one have two tree. All what one should do in -current is to bump --from-tag version to 0.5 in tools/genpkgs. 13.6. Updating the -stable tree * rename the frugalware-current fdbs to frugalware * rebuild the initrd with STABLE = true in the Makefile - update $fst/boot/grub/menu.lst - s/-current// in tools/{genpkgdbs,mkpkglst} - update VERSION in docs/Makefile - remove the archs marked "development-only" from archs() in tools/genpkgdbs - check if the patches under `\_darcs/patches` are there - update `\_darcs/prefs/motd` - run the just modified genpkgs to regenerate the ChangeLog.txt to start from the 0.4 tag to the 0.5 tag - update pacman{,-tools} so that -stable will be the default on -Syu / repoman upd, not -current - update kernel FrugalBuild to hardwire the kernel release (`\_F_kernel_rel`) - upload the fdbs to the mysql db using fdb2db, just run all2db.sh from the /tools dir - create a new chroot tarball for each arch 13.7. Testing * generate isos, test all of them (net,cd,dvd for each arch) * create an usb stick installer tarball for each arch * create an tftp boot image for each arch * check if the upgrade from 0.4->0.5 works or not, probably a simple -Syu is not enough, then write a howto 13.8. Announcement * put the isos online and wait at least 24h so that the mirrors will be in sync at release time * ask Mark (mcangeli at gmail.com) via mail to upload the torrents for the isos to linuxtracker.org * add the new version to the bts * write an announcement, put it out to somewhere and ask Alex or LGee to spellcheck it * push it to the homepage-ng repo * mark the release as "done" in /frugalware/xml/roadmap.xml (homepage-ng repo) and add the proper newsid value * update the topic of #frugalware * update the freshmeat entry 13.9. For the next release * find a codename * update roadmap.xml Done! 14. Table of user / group ids used in Frugalware 14.1. Without specific uid/gid CAPTION: Table: Users and groups that are added without specific uid/gid (should be changed) User Group Package amavis amavis amavisd-new munin munin munin and munin-node 14.2. With specific uid/gid CAPTION: Table: Users and groups that are added with a specific uid/gid ID User Package Group Package 000 root shadow root shadow 001 bin shadow bin shadow 002 daemon shadow daemon shadow 003 adm shadow sys shadow 004 lp shadow adm shadow 005 sync shadow tty shadow 006 shutdown shadow disk shadow 007 halt shadow lp shadow 008 mail shadow mem shadow 009 news shadow kmem shadow 010 uucp shadow wheel shadow 011 operator shadow floppy shadow 012 syncpkgd pacman-tools mail shadow 013 news shadow 014 ftp shadow uucp shadow 015 man shadow 016 cdrom shadow 017 scanner shadow 018 privoxy privoxy privoxy privoxy 019 fst pacman audio shadow 020 nx freenx games shadow 021 slocate slocate 022 utmp shadow 023 camera shadow 024 video shadow 025 smmsp shadow smmsp shadow 026 clamav clamav clamav clamav 027 mysql shadow mysql shadow 028 rsyncd rsync rsyncd rsync 029 _ntp openntpd _ntp openntpd 030 storage shadow 031 pgdb postgresql pgdb postgresql 032 rpc shadow rpc shadow 033 sshd shadow sshd shadow 034 scponly scponly scponly scponly 035 sbox scratchbox 036 rlocate rlocate 037 netdev shadow 038 messagebus dbus messagebus dbus 039 hald hal hald hal 040 041 042 gdm shadow gdm shadow 043 shadow shadow 044 beagleindex beagle beagleindex beagle 045 partimag partimage partimag partimage 046 sabayon sabayon sabayon sabayon 047 048 049 050 ftp shadow 051 telnetd shadow 052 053 054 055 056 057 058 059 060 grsec_procview kernel-grsec 061 grsec_audit kernel-grsec 062 grsec_tpe kernel-grsec 063 grsec_s_all kernel-grsec 064 grsec_s_client kernel-grsec 065 grsec_s_server kernel-grsec 066 067 068 069 070 071 072 073 postfix postfix postfix postfix 074 075 postdrop postfix 076 077 078 079 080 mailman mailman mailman mailman 081 082 083 084 avahi avahi avahi avahi 085 firebird firebird firebird firebird 086 087 088 089 090 pop shadow pop shadow 091 092 093 094 095 096 097 098 nobody shadow 099 nobody shadow nogroups shadow 100 shadow users shadow 101 shadow console shadow 102 103 104 distccd distcc distccd distcc 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 bitlbee bitlbee bitlbee bitlbee 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 15. List of packages needs to be rebuilt after the given bumped 15.1. kernel for i in madwifi ndiswrapper acx100 acerhk gspcav1 wlan-ng rt2500 \ qc-usb fglrx rlocate cdemu adm8211 dazuko ipw3945 nvidia \ nvidia-96xx ivtv truecrypt virtualbox lirc kqemu do go $i bumppkg --rebuild "rebuilt with kernel-2.6.19-3" --rf done 15.2. mysql (only when libmysqlclient's sover is bumped) * courier-authlib * courier-imap * cyrus-sasl * gammu * gdal * hk_classes-mysql * libgda * mysql-ruby * perl-mysql * php * postfix * pure-ftpd 15.3. libgda (maybe need rebuild) * gnumeric * libgnomedb 15.4. db (only on major bumps, ie. 4.2.x -> 4.3.x) * openldap * postfix * apr-util * subversion 15.5. gnutls * weechat * pure-ftpd * lftp * libsoup ( NOTE: first libsoup bump the all the other gnome | gtk* apps ) + evolution-data-server + bug-buddy + gaim + rhythmbox * loudmouth + inkscape * wireshark (at least at .sover-change, which is likely) * net6 * bitlbee (.so) 15.6. dbus * hal * evince * gnome-utils * gnome-media * gnome-volume-manager * nautilus-cd-burner * ivman * k3b * pmount * kdebase * xfce4-terminal * liferea * bmpx * bluez-libs 15.7. dbus-mono * banshee * tomboy * f-spot * galago-sharp 15.8. neon * subversion * rpm * openoffice.org * gst-plugins-bad 15.9. binutils * amule 15.10. libtasn1 * gnutls * evolution (need to figure out which part depends on libtasn1 ...) * lftp * libsoup * loudmouth 15.11. gstreamer (only if is an upgrade for example, from 0.8 to 0.10, or 0.10 to 0.12, etc) * amarok * banshee * rhythmbox * totem * gnome-applets * gnome-control-center * and probably a lot of gnome too 15.12. gtk+2 (only need for special version bumps. Example 2.8 -> 2.10 we need bump these packs because /usr/lib/gtk+-2.0/1.X.X directory changed. BTW not at all bumps. Ex.: 2.6->2.8) * gtk+2-engines * librsvg * libgnomeui * gtk-xfce-engines * kde-theme-qtcurve 15.13. libcdio * sound-juicer 15.14. vte * gnome-terminal * xfce4-terminal * gtk1-sharp * gtk2-sharp * anjuta * tilda * grip 15.15. firefox * galeon * epiphany 15.16. wireless_tools * kdenetwork 15.17. parted * frugalwareutils * gparted * qtparted 15.18. libpqxx * kpogre * asterisk-addons * asterisk * koffice 15.19. openobex * kdebluetooth 15.20. bluez-libs * bluez-utils * kdebluetooth * libbtctl * gnome-bluetooth * bluez-pin 15.21. gail (.so version bump) * eel * gtkhtml 15.22. imagemagick * dvdauthor 15.23. evolution-data-server * ekiga * evolution 15.24. x264 * mplayer 15.25. ocaml * facile 15.26. openbox * obconf 15.27. libassuan * gpg-agent 15.28. pilot-link * gnome-pilot * gnome-pilot-conduits * libmal * kdepim * evolution * sylpheed-claws 15.29. php * eaccelerator 15.30. libevent (on sover change) * tor * nfs-utils 16. Creating translations for init scripts Marcus Habermehl 16.1. Preparing the source The first things to make a script translatable you must add this two lines to the rc script. TEXTDOMAIN=my_service TEXTDOMAINDIR=/lib/initscripts/messages To mark a string as translatable in bash you must prefix the string with $. echo $"This is a translatable string." 16.2. Creating the pot file After this you must create the pot file. $ bash --dump-po-strings rc.my_service | xgettext -L PO -o rc.my_service.pot - 16.3. Creating a po file In the next step you create the po file. $ msginit -l hu_HU Now you can edit the po file with any editor. 16.4. Creating the mo files To create and install the mo files, you must add the po files to the source() array and use the Frcd2 macro in build(). 17. Frugalware Asciidoc quickstart Since 0.6 Frugalware documentation is written in asciidoc which means we have to write README.Frugalware files in asciidoc syntax. Here are some basic asciidoc features and also some things you should not do in a README.Frugalware. 17.1. Features You can use *bold*, _italic_ and also `monospaced` fonts. You can also ``quote'' if you want to do so. When you want to add something to the ------------ command line ------------ that's no problem at all. Maybe you want bulleted items: .Items * item 1 * item 2 * here somes 3 And you can also create lists: 1. First + It's indented, belongs to first. + And this paragraph is also indented. 2. Second + This is inside the second point. + 2.1. Foo + 2.2. Bar + a. Baz 3. Third End of list. Some extras: NOTE: You can also place notes. TIP: It's a tip WARNING: Warning. IMPORTANT: This is important CAUTION: Cave canem! 17.2. Restrictions You must not underline titles with = or -. You might use ~, and ^ for subchapters. If you want one line titles place 3 or 4 = before the title and a space. 17.3. Skeleton for README.Frugalwares So your titles should look something similar: === First chapter -------------- pacman-g2 -Syu -------------- === Second one `\_F_foobar` ==== This is a subchapter... ...and its contents. or First chapter ~~~~~~~~~~~~~ -------------- pacman-g2 -Syu -------------- Second one ~~~~~~~~~~ `\_F_foobar` This is a subchapter... ^^^^^^^^^^^^^^^^^^^^^^^ ...and its contents. 17.4. Skeleton for standalone documentations You might ask then: okay, but how to start? Here is a really simple example: = Title Author Name == First chapter -------------- pacman-g2 -Syu -------------- == Second one `\_F_foobar` And you can generate the html using asciidoc -a toc -a numbered skel.txt 18. Frequently Asked Developer Questions 18.1. What is the recommended way to version bump a package if I don't have darcs push access? 1. Update the FrugalBuild. 2. Optional: update the patches/docs/etc. 3. Compile the package. 4. Upload the new .fpm to incoming. 5. darcs rec and darcs send the fixes. (Don't forget to set your darcs credentials!) 18.2. makepkg ends up with : /usr/info/dir: exists in filesystem Instead of make DESTDIR=$startdir/pkg install you should write Fmakeinstall in your FrugalBuild. 18.3. I can't pacman -Su , it says local version is newer, but I know it isn't! This is a bug in the package's version numbering, the maintainer should bothered with this. Since pacman checks the version numbers (installed vs. repo version), the new package's version should be bigger than the old one to upgrade flawlessly. 18.4. What does 5.55 SBU mean? It took 5.55 times longer to compile the package by the maintainer than binutils. So if you want to know how much will it take to compile a package with 5.55 SBU, you should first compile binutils (makepkg helps you, as it writes how many seconds elapsed). Then you should multiply it by 5.55 to know how many seconds will it take to compile the package. 18.5. Why do maintainers cry about my new package's tarball? Let's have a look at the filelist of eaccelerator's tarball: $ tar -tf eaccelerator-0.9.3-1.tar.bz2 eaccelerator/ eaccelerator/eaccelerator-0.9.3.zip eaccelerator/FrugalBuild eaccelerator/README.Frugalware eaccelerator/eaccelerator-0.9.3-1-i686.fpm $ You have to name the tarball as --.tar.bz2 (or gz), which should only contain a directory at first level, and all the files needed to create the fpm in it. It is the easiest way for the maintainers to work with your tarball when addig your package to the repo. 18.6. What should I include in depends(), rodepends() and makedepends() and what shouldn't? You shouldn't include any trivial makedepends, you should only include what chkdep -p recommends. Trivial makedepends: * auto* * make * gcc * kernel-headers * libtool * glibc Don't forget: every depends is a makedepends as well! The rodepends() array should only contain packages really needed for running the given application. 18.7. What are the various dependancy-control arrays for? * depends should contain any packages that this one depends on a compile and run time as well. * makedepends is for packages that this one needs to compile. * rodepends is for run time only dependencies; eg. a wordlist package (with no executables) needs a program which can handle it as a dictionary. * provides is an alternate name for the package. Main use is for more packages which do the same; eg. hunspell-en and hunspell-de both provides hunspell-dict, and hunspell depends on hunspell-dict instead of any specific language. (Sometimes those packages are conflicting, like postfix provides and conflicts with mta, and exim too - this way there can be only one MTA on the system, without the need to know other MTAs' name.) Be careful with dependency-cycles: while pacman can handle them, makepkg can not. 18.8. How can I have PHP to work with my newly packaged eaccelerator/anything extension? Since package A should not tamper with package B's config files, you should write a README.Frugalware, describing how to enable/use the extension, include it in source() and Fdoc README.Frugalware. 18.9. How can I cross-compile (package) an architecture-independent (non-binary) program? You should modify carch and chost in /etc/makepkg.conf and build the package again. 18.10. repoman upd can't create /var/fst/ as it already exists Su - to root and cd /var/fst && mv * frugalware-current 18.11. How can I access the central FW repo (mirrors are too slow for me)? darcs get --partial http://darcs.frugalware.org/repos/frugalware-current This creates a new local repo for you, which is a copy of the central repo. To update it, run darcs pull in it. That's all to have a read-only copy; if you want to darcs send patches, then you should read the Darcs docs to set up your [28]name, [29]email, etc. 18.12. What should I write as patch name and long comment at darcs rec? Patch name should be the same as the fpm (but without .fpm, of course); and long comment should only contain what you have done to create that patch (eg. "added i686 to archs()" or alike). 18.13. I want to see my accents in darcs what output! echo "export DARCS_DONT_ESCAPE_ISPRINT=1" >> ~/.bash_profile and have your locale set correctly. 18.14. Where should I place my comments about a package? You mean README.Frugalware. It should be in source() and then at the end of the build() you should use: Fdoc README.Frugalware It is automatically included if you use empty build() or Fbuild. 18.15. I want to work with the latest development version of pacman&co.! How? darcs get --partial http://darcs.frugalware.org/repos/pacman-tools cd pacman-tools make dist You will have a brand new .tar.gz. Give it to pacman-tools' FrugalBuild, correct the checksum, create a new pacman-tools package (makepkg -fucH helps) and install it. That's all (and if you don't understand this, read it again, and if it's still not clear, then wait for pacman-tools' normal upgrade since you don't need this really)... 18.16. What is the order of a new package's locales? How should I name them? Have a look at hunspell There is a hunspell package, which depends on hunspell-dict. There is no package named hunspell-dict, but it is provided by the locale packages. The most important ones are -en (==en_US), -hu (==hu_HU), -de (==de_DE), -fr (==fr_FR), -it (==it_IT), -es (==es_ES) and -sk (==sk_SK). here are others: -en_US, -de_CH, -es_MX. The -xx packages will be installed by the non-CD based (ie. netinst, DVD) installers. 18.17. Error handling You are responsible to check if a command used in build() fails. The best is to use the F* macros where possible, they handle the errors for you. If you need custom commands, it's recommended to append || return 1 to every line, so that build() will stop if an error occures. 18.18. Permissions If text files (header files, documentation) are executable, feel free to fix their permission. A bigger problem is the permission of the shared libraries. They must be executable, please fix their permission if necessary. As always, it's recommended to create a patch to fix the problem and send it to upstream. 18.19. Striping Stripping binaries is unnecessary and pointless. Unless you use options=('nostrip') in the FrugalBuild, it's done by makepkg automatically. 18.20. When should I use $Fsrcdir and $Fdestdir Most F* macro will prepend/append those variables for you, but if you use custom commands, then you always have to use them. 18.21. When should I increment a package's release number? * If your change affects only the FrugalBuild (like an up2date fix) then you should not, just push your change. * If your change affects only the fdb (like options=('force') or replaces()) then you should repoman cl after the push but no incrementing is needed * In any other case: you should do so. 19. GNU Free Documentation License Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 19.1. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 19.2. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means an