Monday, April 23, 2012

man-pages-3.39 is released

I've released man-pages-3.39. The release tarball is available on kernel.org. The browsable online pages can be found on man7.org. The Git repository for man-pages is available on kernel.org.

The most notable changes in man-pages-3.39 are as follows:

  • A new malloc_trim(3) page (by me) documents the malloc_trim() function.
  • A new malloc_usable_size(3) page (by me) documents the malloc_usable_size() function.
  • The prctl(2) page adds documentation of the PR_SET_MM operation, thanks to Cyrill Gorcunov
  • Rewrites of a large part of nsswitch.conf(5) to clarify the text and bring it up to date, thanks to Mark Bannister

Friday, March 30, 2012

man-pages-3.38 is released

I've released man-pages-3.38. The release tarball is available on kernel.org. The browsable online pages can be found on man7.org. The Git repository for man-pages is available on kernel.org.

The most notable changes in man-pages-3.38 are as follows:

  • A new get_nprocs_conf(3) page by Petr Beňas documents the get_nprocs_conf() and get_nprocs() functions.
  • A new mallopt(3) page (by me) documents the mallopt() library function and corresponding environment variables used for controlling the behavior of the malloc(3) suite of functions.
  • A new malloc_get_state(3) page (by me) documents the malloc_get_state() and malloc_set_state() functions.
  • The mtrace(3) page has been completely rewritten (by me), adding a lot of detail.
  • A new scandirat(3) page by Mark Bannister documents the scandirat() function.
  • Mark Bannister also added documentation of the qsort_r() function to the qsort(3) page.
  • I've added documentation of the aligned_alloc() function (specified in the recently released C11 standard) and the obsolete pvalloc() function to the posix_memalign(3)
  • page.
  • The malloc(3) page adds a short discussion of allocation arenas.
(Updated 2012-04-03: fix some broken links, and replace erroneous mention of "mcheck()" with "mtrace()".)

Friday, March 9, 2012

man-pages-3.37 is released

I've released man-pages-3.37. The release tarball is available on kernel.org. The browsable online pages can be found on man7.org. The Git repository for man-pages is available on kernel.org (and for the time being at least, also remains available on Github).

The most notable changes in man-pages-3.37 are as follows:

  • A new getent(1) page, contributed by Mark Bannister, documents the getent command provided by glibc.
  • A major update to the ptrace(2) page by Denys Vlasenko.
  • Updates to the capabilities(7) page to add various privileged operations to the lists of operations governed by each capability.
(Updated 2012-03-25 to fix a broken link)

Sunday, March 4, 2012

man-pages-3.36 is released

I've released man-pages-3.36. The release tarballs are once more available on kernel.org. The browsable online pages can be found on man7.org. The Git repository for man-pages is once more available on kernel.org (and for the time being at least, also remains available on Github).

The most notable changes in man-pages-3.36 are as follows:

  • A new sendmmsg(2) man page adds documentation of the sendmmsg() system call, which was added in Linux 3.0.
  • The fallocate(2) man page adds documentation of the FALLOC_FL_PUNCH_HOLE operation, which was added in Linux 2.6.38.
  • The feature_test_macros(7) man page adds documentation of the _ISOC11_SOURCE feature test macro, which is added in the upcoming glibc 2.16.
(Updated 2012-03-25 to fix a link.)

Saturday, February 25, 2012

Reestablishing kernel.org access

After last year's kernel.org break-in, the new regime for access to kernel.org resources changed, and everyone had to reestablish access under the new system. I've only recently finished all the required steps so that I can both host the man-pages Git repository on kernel.org and upload release tarballs to the download directory.

To remind myself, and perhaps help others who may in the future need to do some of these steps, here's what I needed to do (corrections and comments welcome):

  1. As per H. Peter Anvin's instructions, create a (new) PGP key.
  2. Upload the PGP public key to the keyserver system (I used pgp.mit.edu, but any of the interconnected keyserver systems will do).
  3. Get my PGP key signed by others in the kernel.org ecosystem, so that my key can be considered trustworthy. Luckily, I was at LinuxCon in Prague last year when a lot other people, including many of the kernel developers at the collocated Kernel Summit, were trying to do exactly the same thing, so I managed to get a healthy set of signatures on my key. One way or another, you need to get such signatures on your key. (If you don't come into regular contact with some core kernel developers, or see them at conferences, this map may help.)
  4. Send the key ID and fingerprint to keys@zytor.com.
  5. Since my key was well signed, I soon afterward received an email from the kernel.org admins. That mail was encrypted using my public PGP key, and after decrypting, decompressing, and untarring, it contained three files:
    • mtk: A private ssh key generated for me by the kernel.org admins. (The file has the same name as my kernel.org username.) The public key is stored on kernel.org. The private key is needed for gitolite and kup access.
    • welcome.readme: Various information, including
      • The name of the host providing gitolite access (ra.kernel.org)
      • My username on that host (mtk)
      • The password for my SSH key
      • Some basic information on working with gitolite
    • ssh_keygen.output: Information on the generation of my RSA key pair.
  6. Configure SSH to know about my new key:
    • copy (and rename) the file mtk to ~/.ssh/mtk.kernel.org.
    • add the new key to my SSH config, by adding the following lines to ~/.ssh/config:
      Host ra.kernel.org
       IdentityFile ~/.ssh/mtk.kernel.org
  7. Use ssh-keygen to change the password on my SSH key to something more memorable.
  8. Create a new empty man-pages Git repo on kernel.org:
    $ git clone gitolite@ra.kernel.org:/pub/scm/docs/man-pages/man-pages
  9. Set up my local man-pages Git repo to use gitolite. No software installation is required on the client side to use gitolite, but the local Git repo must be configured to use the gitolite protocol. Now, I have the following in my .git/config:
    [remote "origin"]
     url = gitolite@ra.kernel.org:/pub/scm/docs/man-pages/man-pages.git
     fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
     remote = gitolite@ra.kernel.org:/pub/scm/docs/man-pages/man-pages.git
     merge = refs/heads/master
    [remote "kernel.org"]
     url = gitolite@ra.kernel.org:/pub/scm/docs/man-pages/man-pages.git
     push = +refs/heads/master:refs/heads/master
  10. Push my Git repo to kernel.org:
    $ git push kernel.org
    $ git push --tags kernel.org
  11. Set a description for the kernel.org repo:
  12. $ echo "Linux man pages Sections 2, 3, 4, 5, and 7" | \
        ssh gitolite@ra.kernel.org setdesc /pub/scm/docs/man-pages/man-pages.git
    Enter passphrase for key '/home/mtk/.ssh/mtk.kernel.org':
    $ ssh gitolite@ra.kernel.org getdesc /pub/scm/docs/man-pages/man-pages.git
    Enter passphrase for key '/home/mtk/.ssh/mtk.kernel.org':
    Linux man pages Sections 2, 3, 4, 5, and 7
    
    
    Update, August 2013: The way to do this nowadays is something like:
    
    
    $ ssh gitolite@ra.kernel.org desc pub/scm/docs/man-pages/man-pages "Linux man pages Sections 2, 3, 4, 5, and 7"
    
    
  13. Install kup, by cloning the kup Git repo, which provides a perl script that is the kup client.
    $ git clone git://git.kernel.org/pub/scm/utils/kup/kup.git
    Along the way, I installed gnupg-agent and libconfig-simple-perl. This was a recently rebuilt system, so some pieces like this were still missing; the libconfig-simple-perl package was essential to run the kup perl script. (There are kup packages or kup-client packages available for RPM-based systems, and a kup-client package for Debian-based systems.)
  14. Set up a kup config file, ~/.kuprc, containing:
    host = mtk@geb.kernel.org
    rsh = /usr/bin/ssh -a -x -k -T
    As noted in a Nov 2011 message to the kernel.org users mailing list, geb.kernel.org is the domain used for kup uploads on kernel.org.
  15. Configure SSH to use my SSH key on geb.kernel.org, by adding the following lines to ~/.ssh/config:
    Host geb.kernel.org
     IdentityFile ~/.ssh/mtk.kernel.org
  16. Sign and upload a man-pages tarball to the directory to which the kernel.org admins had already given me access:
    $ gpg --detach-sig man-pages-3.35.tar
    $ ls man-pages-3.35.tar*
    man-pages-3.35.tar  man-pages-3.35.tar.sig
    $ kup put man-pages-3.35.tar man-pages-3.35.tar.sig \
              /pub/linux/docs/man-pages/man-pages-3.35.tar.gz
    Enter passphrase for key '/home/mtk/.ssh/mtk.kernel.org':
    7813120 [==================================================] 100%
    Compressing: .bz2:100% .gz:100% .xz:100%
    And then allow a moment before checking that the upload is visible at http://www.kernel.org/pub/linux/docs/man-pages/.
Updated 2012-02-27 to add a piece to step 10, and add a step (11) to set the repo description.

Sunday, February 19, 2012

Seeking a Solaris test system

The Solaris system that I used for comparative tests connected with the man-pages project (and also for code in The Linux Programming Interface), has gone away. If you (or someone you know) would be able to provide me with ssh access to a Solaris box in order to run test programs, that would be much appreciated. I'd only be using it occasionally (probably weeks between logins) and running small test programs (we're talking code with minimal CPU and RAM requirements). Please email me at mtk.manpages-AT-gmail.com.

Wednesday, February 15, 2012

Git repo and release tarballs restored to kernel.org

I've now done most of the steps to reestablish access on kernel.org. The man-pages release tarballs can once more be downloaded from http://www.kernel.org/pub/linux/docs/man-pages/. And the man-pages Git repo is back in its original location, and can be cloned via:

$ git clone http://git.kernel.org/pub/scm/docs/man-pages/man-pages
(For the moment, I'll probably maintain the duplicate upstream repo on GitHub, but I may well delete it in the near future, unless some folk tell me they find it useful.)

Thursday, October 20, 2011

LinuxCon Europe

I'll be at LinuxCon Europe, 26-28 October, in Prague, Czech Republic. (In fact, I arrive already on Monday, 24 October.) I'll have a few copies of my book, The Linux Programming Interface, with me for sale. If you want to buy a copy (signed even, if you want!), drop me a mail (mtk AT man7.org).

Tuesday, October 4, 2011

man-pages-3.35 is released

I've released man-pages-3.35. For the moment, the various pieces of the release remain at different locations than usual. The browsable online pages can be found on man7.org; the release tarball is available here on kernel.org.

A git repository for man-pages can be found on github kernel.org.

The most notable changes in man-pages-3.35 are as follows:

  • A new recvmmsg(2) page (written by Andi Kleen and me) documents the recvmmsg() system call that was added to Linux back in version 2.6.32.
  • A new setns(2) page (written by Eric Biederman) documents the setns() system call that was added in Linux 3.0.
  • Various global edits to improve the consistency of terminology used in the man pages.

Friday, September 23, 2011

man-pages-3.34 is released

I've released man-pages-3.34. Again, because of the problems at kernel.org, the various pieces of the release are at different locations than usual (and possibly some of these locations may become permanent). The browsable online pages can be found on man7.org; the release tarball is available here on kernel.org.

A git repository for man-pages can be found on github kernel.org.

The most notable changes in man-pages-3.34 are as follows:

  • A new rt_sigqueueinfo(2) documents the rt_sigqueueinfo() and rt_tgsigqueueinfo() system calls. At the same time, the sigqueue() man page was moved from Section 2 to Section 3, since the interface it documents really is a library function (layered on top of rt_sigqueueinfo()).
  • New man pages for the cciss(4) and hpsa(4) drivers. Thanks to Stephen Cameron.
  • The fstatat(2) man page adds documentation of the AT_NO_AUTOMOUNT flag added in Linux 2.6.38.
  • The lseek(2) man page adds documentation of the SEEK_HOLE and SEEK_DATA commands scheduled for the upcoming Linux 3.1. (These commands allow a program to map file holes.)
  • The madvise(2) man page adds documentation of the MADV_HUGEPAGE and MADV_NOHUGEPAGE commands added in Linux 2.6.38.
  • The feature_test_macros(7) man page adds documentation of the _ISOC95_SOURCE macro added in glibc 2.12

Tuesday, September 20, 2011

man-pages-3.33 is released

After a long gap, I've released man-pages-3.33. Given the ongoing problems at kernel.org, the various pieces of the release are at different locations than usual (and possibly some of these locations may become permanent). The browsable online pages can be found on man7.org; the release tarball is available here on kernel.org.

A git repository for man-pages can be found on github kernel.org.

The most notable changes in man-pages-3.33 are as follows:

  • The sync(2) page adds documentation of the syncfs() system call that was added in Linux 2.6.39.
  • The syscalls(2) has been updated to be current as at Linux 3.1.
  • The syslog(2) page adds documentation of the CAP_SYSLOG capability added in Linux 2.6.37.
In addition, various fixes were made in many other pages.

Relocated git repository for man-pages

[Note (Mar 2014): the info in the post below is historical. The man-pages git repo long ago returned to kernel.org, see https://www.kernel.org/doc/man-pages/download.html.]

Since kernel.org remains down, I've set up a man-pages git repo on github, at https://github.com/mkerrisk/man-pages. To clone the repo:

  git clone git@github.com:mkerrisk/man-pages.git

I'm undecided yet, but this may become the permanent location of the upstream repository.

Update 2011-10-04: as a couple of people pointed out (and as I noted in some later posts), the better commands for cloning the repo would be:

  git clone git://github.com/mkerrisk/man-pages.git

or:

  git clone https://github.com/mkerrisk/man-pages.git

Sunday, December 5, 2010

man-pages-3.32 is released

I've uploaded man-pages-3.32 into the release directory (or view the online pages). The most notable changes in man-pages-3.32 are as follows:

  • The readv(2) page adds documentation of the preadv() and pwritev() system calls.
  • The getrlimit(2) page adds an example of the use of the recently added prlimit() system call.
  • A new phread_sigqueue(3) page documents the pthread_sigqueue() library function.

Wednesday, November 17, 2010

The Linux Programming Interface is released

I'm happy to announce that my book, The Linux Programming Interface (TLPI), is now available. TLPI is a detailed guide and reference for system programming on Linux and UNIX systems, 1552 pages in length, with 115 diagrams, 88 tables, nearly 200 example programs, and over 200 exercises.

The TLPI web site contains the detailed table of contents (PDF or HTML), preface, sample chapters, and index for download. It also provides complete source code for the book (both as a tarball for download and browsable as individual files online). You can find a detailed description of TLPI on the web site here.

A few reviews (all extremely positive) have already appeared. You can find pointers to reviews here.

For information on ordering (a nice way to support the work of the man-pages maintainer!), look here.

(Post updated 2010-11-20, to fix a typo and add a detail to the description.)


Sunday, November 14, 2010

man-pages-3.31 is released

I've uploaded man-pages-3.31 into the release directory (or view the online pages). This is a fairly small release. The most notable changes in man-pages-3.31 are as follows:

  • The getrlimit(2) man page adds documentation of the prlimit() system call, which was new in Linux 2.6.36.
  • The inotify(7) man page adds documentation of the IN_EXCL_UNLINK flag, also new in Linux 2.6.36.