source: postlfs/config/compressdoc.xml@ b94cd51

10.0 10.1 11.0 11.1 11.2 6.0 6.1 6.2 6.2.0 6.2.0-rc1 6.2.0-rc2 6.3 6.3-rc1 6.3-rc2 6.3-rc3 7.10 7.4 7.5 7.6 7.6-blfs 7.6-systemd 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind gnome kde5-13430 kde5-14269 kde5-14686 krejzi/svn lazarus nosym perl-modules qt5new systemd-11177 systemd-13485 trunk upgradedb v5_0 v5_0-pre1 v5_1 v5_1-pre1 xry111/intltool xry111/soup3 xry111/test-20220226
Last change on this file since b94cd51 was b94cd51, checked in by Larry Lawrence <larry@…>, 19 years ago

compressdoc patch

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@1134 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 5.4 KB
Line 
1<sect1 id="postlfs-config-compressdoc" xreflabel="compressdoc">
2<?dbhtml filename="compressdoc.html" dir="postlfs"?>
3<title>Compressing man and info pages</title>
4
5<para>Man and info reader programs can transparently process gzipped or
6bziptwoed pages, a feature you can use to free some disk space while keeping
7your documentation available. However, things are not that simple: man
8directories tend to contain links - hard and symbolic - which defeat simple
9ideas like recursively calling gzip on them. A better way to go is to use the
10script below.
11</para>
12
13<screen><userinput><command>cat &gt; /usr/bin/compressdoc &lt;&lt; "EOF"</command>
14
15#!/bin/sh
16
17function changefileext
18{
19 # prints the given filename with the new extension instead of
20 # the old one. ! - always prints an absolute filename even if
21 # the caller provides a relative one.
22 # parameters : 1 - file name
23 # 2 - old extension
24 # 3 - new extension (may be empty)
25
26 echo `dirname $1`\/`basename $1 $2`$3
27}
28
29# check that the command line is right, if not print a relevant message.
30
31if [ ! -d $1 -o -z $1 ] || [ "$2" != "gz" -a "$2" != "bz2" ]
32then
33 echo "Usage : $0 /path/to/doc/dir gz/bz2"
34 echo "e.g. $0 /usr/info gz to compress info pages in gzip format"
35 echo "or $0 /usr/X11R6/man bz2 to compact X man pages using bzip2."
36 exit 1
37fi
38
39# set up a few variables.
40
41NEWEXT=.$2 # NEWEXT = extension of newly compressed files
42
43if [ "$NEWEXT" == ".bz2" ]
44then
45 OLDEXT=".gz" # OLDEXT = extensions of files to recompress
46 DECOMPRESS="gunzip -f" # DECOMPRESS = command to decompress a file
47 COMPRESS="bzip2 -f9" # COMPRESS = command to compress a file
48else
49 OLDEXT=".bz2"
50 DECOMPRESS="bunzip2 -f"
51 COMPRESS="gzip -f9"
52fi
53
54# process all files not in the target format under the provided root directory.
55# I use cd instead of giving $1 as an argument to find because this causes
56# problems with symbolic links, e.g. /usr/man -> /usr/share/man.
57
58cd $1
59
60for f in `find . \! -name "*$NEWEXT"`
61do
62 # the following test is needed because we have to update links ahead of
63 # ourselves, so $f is sometimes a nonexistent file or a link to one.
64
65 if [ -f $f -o -L $f ]
66 then
67 FILE=$f # the file being processed
68 BASEFILE=`basename $FILE` # its basename (see HLINKS)
69 INODE=`find $FILE -printf %i` # its inode number (see HLINKS)
70 NEWFILE=`changefileext $FILE $OLDEXT $NEWEXT` # new file name
71
72 # HLINKS is the list of all hard links to the current file.
73
74 HLINKS=`find . \! -name $BASEFILE -inum $INODE`
75
76 if [ -L $FILE ]
77 then
78 # the current file is a symbolic link, so we change
79 # its name and the name of its target.
80
81 TARGET=`readlink $FILE`
82 rm -f $FILE
83 ln -sf `changefileext $TARGET $OLDEXT $NEWEXT` $NEWFILE
84 elif [ -f $FILE ]
85 then
86 # the current file is a regular file.
87
88 TEMPFILE=`changefileext $FILE $OLDEXT`
89
90# if there are several versions of a page (at worst, there can be
91# one uncompressed, one old-compressed and one new-compressed), then
92# we have to make sure that only the most recent file is kept, because
93# it most likely means the user installed several versions of a package.
94
95 # first, if we are dealing with an old-compressed file,
96 # expand it if it is more recent than the uncompressed
97 # file *and* the new-compressed file, else delete it.
98 # (works even if TEMPFILE and/or NEWFILE do not exist)
99
100 if [ "$FILE" != "$TEMPFILE" ]
101 then
102 if [ $FILE -nt $TEMPFILE -a $FILE -nt $NEWFILE ]
103 then
104 $DECOMPRESS $FILE
105 else
106 rm -f $FILE
107 fi
108 FILE=$TEMPFILE
109 fi
110
111 # now we are dealing with an uncompressed file that may
112 # exist or not (because of the above). If it is newer
113 # than both the new-compressed and the old-compressed
114 # files then it is compressed, else it is deleted.
115
116 if [ -f $FILE ]
117 then
118 if [ $FILE -nt $NEWFILE -a $FILE -nt $FILE$OLDEXT ]
119 then
120 $COMPRESS $FILE
121 else
122 rm -f $FILE
123 fi
124 fi
125 fi
126
127 # update the hard links to the current files,
128 # as the new inode number is now known.
129
130 for g in $HLINKS
131 do
132 rm -f $g
133 ln -f $NEWFILE `changefileext $g $OLDEXT $NEWEXT`
134 done
135 fi
136done
137
138<command>EOF
139chmod 755 /usr/bin/comprdoc</command></userinput></screen>
140
141<para>Now, as root, you can issue a
142<userinput><command>/usr/bin/compressdoc /usr/man bz2</command></userinput>
143to compress your system man pages. Similarly, you can run it on the
144<filename class="directory">/usr/info</filename> directory. Don't forget
145<filename class="directory">/usr/X11R6/man</filename> if you install the
146<application>X</application> Window system. A few other programs, like
147<application>XEmacs</application>, also install their documentation in
148nonstandard places.</para>
149
150<para>Generally, package installation systems do not compress man/info pages,
151which means you will need to run the script again if you want to keep the size
152of your documentation as small as possible. Also, note that running the script
153after upgrading a package is safe: when you have several versions of a page
154(for example, one compressed and one uncompressed), the most recent one is kept
155and the others deleted.</para>
156
157</sect1>
158
Note: See TracBrowser for help on using the repository browser.