Cleaning and Customizing Your Ports[·Òë]
[color=blue][size=6]Cleaning and Customizing Your Ports[/size][/color]ÔÎÄ£º
[url]http://www.onlamp.com/pub/a/bsd/2003/09/18/FreeBSD_Basics.html[/url]
×÷ÕߣºDru Lavigne
·Ò룺rainren
±¾ÈËÄÜÁ¦ÓÐÏÞ£¬ ºÜ¶àµØ·½×ÔÎҸоõ¶¼·ÒëµÄ²»¶Ô£¬ Çë´ó¼ÒÖ¸³ö£¬ ÎÒÂýÂýÐ޸ġ£×ªÌùÇëemail to : [email]renhw895@sohu.com[/email]
ÎÒÃÇǰÁ½ÆªÎÄÕÂÌÖÂÛÁËÔõÑùʹÓÃportsºÍÓÃportupgradeÉý¼¶ÄãÒѰ²×°µÄ³ÌÐò¡£ ½ñÌ죬ÎÒ½«Ê¾·¶ÈçºÎ¸É¾»µÄÐ¶ÔØÓ¦ÓóÌÐòºÍʹÓÃpkgtools.confÀ´¶¨ÖÆÄãµÄports treeÒÔ½áÊøÕâһϵÁС£
ºÜ¶àÈËÈÏʶµ½°²×°¡¢ Ð¶ÔØÈí¼þÊÇÒ»¼þÔÓÂÒµÄÊÂÇé¡£°²×°Ê±Ò»Ð©ÁÙʱÎļþ¡¢ ûÓÐÔĶÁµÄREADMEs¡¢ ºÍһЩ²»Çå³þµÄĿ¼¶¼µ¼ÖÂÓ²ÅÌ»ìÂÒ²»¿°¡£ÓÐʱ£¬ ÎÒÃÇÐ¶ÔØÁËÒ»¸öÈí¼þµ«Ëü»¹»áÁôÏÂһЩ²»ÔÙʹÓõÄÎļþÔÚϵͳÀï¡£ ¸üÔãµÄÊÇ£¬ °²×°Ê±ÖØÐ´£¬ µ«Ð¶ÔØÊ±È´É¾³ýÆäËüÈí¼þ»áÓõ½µÄ¿âÎļþ¡£ ÕâЩʹµÃÓû§ÖØÐ°²×°ÏµÍ³ÒÔÇóµÃÒ»¸ö¸É¾»µÄʹÓû·¾³¡£
[size=4][color=blue]Keeping Your Ports Clean[/color][/size]
ÐÒÔ˵Ø, ÕâÀïÓÐһЩ¹¤¾ß¿ÉÒÔʹÄã´ÏÃ÷µØ¡¢ÕýÈ·µØ¹ÜÀíÈí¼þ°²×°£¬ ʹÄãµÄFreeBSDϵͳÄÜÁ¼ºÃµÄÔËÐкܶàÄê¡£ÀýÈçµ±Äã´Óports°²×°Ò»¸öÈí¼þʱҪ¼ÇµÃ°üº¬Õâ¸öµ¥´Ê£º
[color=red]
# make install clean
[/color]
Õ⽫¸æËßmakeÔÚÈí¼þ°²×°³É¹¦Ê±ÇåÀíËüµÄ¹¤×÷Ŀ¼¡£ Èç¹ûÄãÍü¼ÇÁËʹÓÃclean£¬ ÄãºÜ¿ì»á·¢ÏÖÄÇЩ¹¤×÷Ŀ¼ռÓÃÁ˺ܶàÓ²Å̿ռ䡣
Èç¹ûÄãµÄÓ²Å̿ռäÌØ½ôÕÅ£¬ Äã¿ÉʹÓÃÕâ¸öÃüÁî´úÌæ£º
[color=red]
# make install distclean
[/color]
µ±Äã°²×°Ò»¸öportsʱ£¬ Ô´³ÌÐò½«´Ó»¥ÁªÍøÉÏÏÂÔØÏÂÀ´²¢copiedµ½/usr/ports/distfiles¡£ µ±ÄãÏëÖØÐ°²×°ÄǸöportsʱ£¬ ÕâЩԴ³ÌÐòÒѾÔÚÄãµÄÓ²ÅÌÉÏÁË¡£ distclean ½«¸æËßmake ÔÚÈí¼þ°²×°³É¹¦Ê±É¾³ýÕâЩԴ³ÌÐò¡£ ¿ÉÒÀ¾ÝÄãµÄÓ²Å̿ռäºÍÄãµÄµçÄÔÓ뻥ÁªÍøµÄÁ¬½ÓËÙ¶ÈÀ´¾ö¶¨ÊÇ·ñʹÓÃdistclean¡£ ÁíÍ⣬ ÒòһЩÐí¿ÉÖ¤µÄÔÒò£¬ һЩports »áÒªÇóÄãÊÖ¶¯È¡µÃÔ´³ÌÐò²¢½«ËüÃÇcopiedµ½/usr/ports/distfiles¡£ ÎÒ¾õµÃ±£´æÔÚÓ²ÅÌÉϸü·½±ã£¬ Òò´ËÎÒÔÚ°²×°portsʱһ°ã²»»áʹÓÃdistclean¡£
ÓÐÁ½¸öÑ¡Ïî¿ÉÒÔ´ÓÁíÍâµÄ;¾¶À´½ÚÊ¡ÄãµÄÓ²Å̿ռ䡣 Èç¹ûÄã°²×°ÁËportupgrade£¬ Äã¿ÉÒÔʹÓÃportscleanÀ´×öÕâÏ×÷¡£ ´ÓÃû×Ö¿ÉÒÔ¿´³ö£¬ Õâ¸öÃüÁî¾ÍÊÇÓÃÀ´ÔÚports °²×°ºó×öһЩÇåÀí¹¤×÷µÄ¡£
ÎÒÓÐÒ»¸öϵͳרÃÅÓÃÀ´²âÊÔ£¬ ÎÒÔÚÉÏÃæ°²×°¡¢Ð¶ÔØÁ˼¸°Ù¸öports£¬ ƽ³££¬ ÎÒ»áʹÓÃcleanÇåÀí£¬ µ«ÓÐʱÎÒ»áʹÓÃdistclean¡£ À´ÈÃÎÒÃÇ¿´Ò»Ïµ±Ç°µÄÓ²ÅÌʹÓÃÇé¿öºÍʹÓÃÁËportscleanºóÓÖÓÐʲô²»Í¬¡£ Ê×ÏÈ£¬ ²é¿´Ò»ÏÂ/usr·ÖÇøÊ¹ÓÃÁ˶àÉÙÓ²Å̿ռ䣺
[color=red]
# df /usr
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1f 13360662 6189648 6102162 50% /usr
[/color]
ÏÂÒ»²½ÎÒÃÇÀ´¿´¿´/usr/portsµÄʹÓÃÇé¿ö¡£ Õâ¸öÃüÁÏÔʾʹÓÃÓ²Å̿ռä×î¶àµÄ10¸öĿ¼£º
[color=red]
# du /usr/ports |sort -rn|head
3110862 /usr/ports
1848846 /usr/ports/distfiles
822278 /usr/ports/editors
816710 /usr/ports/editors/openoffice-devel
816592 /usr/ports/editors/openoffice-devel/work
604784 /usr/ports/editors/openoffice-devel/work/oo_644_src
362536 /usr/ports/distfiles/KDE
295404 /usr/ports/distfiles/openoffice
211718 /usr/ports/editors/openoffice-devel/work/mozilla
211654 /usr/ports/editors/openoffice-devel/work/mozilla/work
[/color]
Hmmm, ¿´ÆðÀ´ÎÒÔÚ°²×°ÁËOpenOfficeºóûÓÐʹÓÃdistclean¡£
ÎÒÏÖÔÚ½«ÇåÀíÄÇЩÍü¼ÇµÄ¹¤×÷Ŀ¼£º
[color=red]
#portsclean ?C
[/color]
ËüÕæµÄÄÜÇåÀíÓ²Å̿ռäÂð£¿
[color=red]
% df /usr
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1f 13360662 5160664 7131146 42% /usr
[/color]
oh yeah. ÇåÀíÁË8%µÄÓ²Å̿ռ䡣 ¼ÇסÇåÀí¹¤×÷Ŀ¼ÊÇÒ»¼þºÜºÃµÄÊÂÇ飬 ±Ï¾¹ËüÃÇÖ»ÔÚ°²×°Èí¼þʱʹÓᣠµ±Èí¼þ°²×°³É¹¦ºóËüÃǽ«²»ÔÙÐèÒª¡£
ÏÂÒ»¸öportscleanÑ¡ÏîÒ²·Ç³£ÓÐÓᣠȷÐÅÄãµÄ/usr/ports/distfilesÍêÕûÎÞȱ¡£ µ±¹ýÒ»¶Îʱ¼ä£¬ÄãÐ¶ÔØÁËһЩӦÓóÌÐò¶øÇÒ»¹½«Ò»Ð©³ÌÐòÉý¼¶µ½ÁË×îа汾¡£ µ«ÓÐһЩ²»ÐèÒª»ò¹ýʱµÄÔ´³ÌÐò»¹ÁôÔÚ/usr/ports/distfilesÀï¡£ À´ÈÃÎÒÃǽ«ËüÕÒ³ö²¢ÇåÀíµô£º
[color=red]
# portsclean -DD
Detecting unreferenced distfiles...
<output varies>
À´¿´¿´ÓÐʲô±ä»¯£º
[color=red]
# df /usr
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1f 13360662 4092490 8199320 33% /usr
[/color]
Whoa, ÓÖÇåÀí³öÁË9%µÄÓ²Å̿ռ䡣À´ÈÃÎÒÃÇ¿´¿´Ö÷ÒªµÄ²î±ð£º
[color=red]
# du /usr/ports | sort -rn | head
1011998 /usr/ports
780760 /usr/ports/distfiles
161724 /usr/ports/distfiles/openoffice
137010 /usr/ports/distfiles/staroffice52
122648 /usr/ports/distfiles/KDE
55478 /usr/ports/distfiles/xc
24936 /usr/ports/distfiles/rpm
20536 /usr/ports/devel
18194 /usr/ports/distfiles/AbiWord
17704 /usr/ports/distfiles/ghostscript
[/color]
ÏÖÔÚÓ²ÅÌʹÓÿռäÒѼõÉÙÁ˺ܶ࣬ µ«ÎÒµÄϵͳÉÏ»¹±£Áô×ÅÎÒÆ½³£°²×°Èí¼þµÄÔ´´úÂë¡£
[size=6][color=blue]Customizing Available Ports[/color][/size]
ÈÃÎÒÃÇÀ´¿´¿´ÈçºÎ¶¨ÖÆports collection¡£ µ±Äã°²×°ÁËportupgradeºó£¬ /usr/local/etc/pkgtools.conf ºÍ/usr/local/etc/pkgtools.conf.sample½«°²×°ÔÚÄãµÄϵͳÀȱʡÇé¿öÏ£¨Ä¬ÈÏÇé¿öÏ£©£¬ ÕâÁ½¸öÎļþÊÇÏàͬµÄ¡£¿ÉÒÔ¸ü¸Ä/usr/local/etc/pkgtools.confµ«Ó¦±£³Ö/usr/local/etc/pkgtools.conf.sample²»±ä£¬ µ±³öÏÖ´íÎó£¬ Äã¿ÉÒԻص½×îÔʼµÄÉèÖá£
»¨µãʱ¼äÔĶÁÕâ¸öÎļþ£¬ Äã»á·¢ÏÖËü»áºÜºÃµÄ°ïÖúÄãÈ¡µÃÄãÏëµ½µÄports¡£ÎÒÓÐһЩÃ÷È·µÄ·Ç³£ÓÐÓõÄÑ¡Ôñ£¬ µ«ÄãÒª»¨µãʱ¼ä¸Ä³ÉÄãËùÐèÒªµÄ¡£
¿ªÊ¼£¬ Õâ¸öÎļþÔÊÐíÄã¸øportupgradeÕâ×鹤¾ßÌ×¼þÉèÖù¤×÷»·¾³¡£ÀýÈ磬 ȱʡÇé¿öϵÄÁÙʱĿ¼ÊÇ/var/tmp£¬ ÔÚ/varºÜСµÄÇé¿öÏÂÕâ»áÓÐһЩÎÊÌâ³öÏÖ¡£ ÎÒÃÇÀ´¸Ä±äÕâ¸öȱʡֵ£¬ ´Ó/usr/local/etc/pkgtools.confÕÒµ½ÏÂÃæÕâÒ»ÐУº
[color=red]
# ENV['PKG_TMPDIR'] ||= '/var/tmp'
[/color]
½«Ëü¸Äµ½ÄãÏëÒªµÄĿ¼£º
[color=red]
ENV['PKG_TMPDIR'] ||= '/usr/tmp'
[/color]
Òª¼ÇµÃÈ¥µô×¢ÊÍ·ûºÅ#£¬ ²¢È·¶¨ÄãÖ¸¶¨µÄĿ¼ÒÑ´æÔÚ¡£
ÁíÒ»¸öÓÐÓõÄÉèÖÃÊÇÉèÖúöÂԵķÖÀࣺ(Another useful setting is the ignore categories section)
[color=red]
# IGNORE_CATEGORIES: array
#
# This is a list of port categories you want the pkgtools to ignore.
# Typically you want to list language specific categories of the
# languages you don't use.
#
# After configuring this list, you need to rebuild the ports
# database to reflect the changes. (run 'portsdb -Ufu')
#
# e.g.:
# IGNORE_CATEGORIES = [
# 'chinese',
# 'french',
# 'german',
# 'hebrew',
# 'japanese',
# 'korean',
# 'russian',
# 'ukrainian',
# 'vietnamese',
# ]
IGNORE_CATEGORIES = [
]
[/color]
ÕâÀ ×¢ÊÍÊ®·Ö¸É¾»¡£ Èç¹ûÄã¾ö¶¨Ê¹ÓÃÕâ¸öÓÐÓõÄÑ¡Ïîʱ£¬ È¥µôÄãÏëÒªºöÂԵķÖÀàÇ°ÃæµÄ×¢ÊÍ·ûºÅ#¡£ µ±ÓïÑÔ·ÖÀ౻ѡÔñºó£¬ Ä㻹¿ÉÒÔºöÂÔÆäËüµÄ·ÖÀà¡£ È磺Äã´Óδ´òËã´ÓastroºÍirc·ÖÀàÖа²×°ÈκγÌÐò£¬ Äã¿ÉÒÔ½«ËüÃÇҲд½øºöÂԵķÖÀàÖС£ ÏÂÃæÊÇÀý×Ó£º
[color=red]
IGNORE_CATEGORIES = [
'chinese',
'german',
'hebrew',
'japanese',
'korean',
'russian',
'ukrainian',
'vietnamese',
'astro',
]
# IGNORE_CATEGORIES = [
# ]
[/color]
ÉÏÃæ£¬ ÎÒ×¢ÊÍÁËĬÈÏÇé¿öÏ¿յÄIGNORE_CATEGORIES¡£ ²¢È¥µôÁËÎÒÏëÒªºöÂԵķÖÀàÇ°ÃæµÄ×¢ÊÍ·ûºÅ#£¬ ÒÔͬÑùµÄ¸ñʽ½«astro·ÖÀà¼ÓÁ˽øÈ¥¡£ ±ðÍü¼ÇÁËÕÕ×¢ÊÍÉÏ˵Ã÷µÄ×ö£¬ ²¢Ö´ÐÐÏÂÃæµÄÃüÁ
[color=red]
# portsdb -Ufu
[/color]
ºÃ£¬ ±£´æÄãËù×öµÄÐ޸ġ££¨once you've saved your edits to this section.£©
[color=blue][size=6]Customizing Individual Ports Build Options[/size][/color]
ÔÚÕâ¸öÎļþÖÐ×îÓÐÓõÄÉèÖÃÖ®Ò»ÊÇÉèÖÃMAKE_ARGS»á»°¡£ һЩportsÔÊÐíÔÚ°²×°Ê±ÉèÖÃһЩ²ÎÊýÀ´¹æ¶¨ÈçºÎ°²×°Ëü¡£ ÕâЩ²ÎÊý¿ÉÒÔÔÚport¡¯s MakefileÀïÕÒµ½»òÕâÑù£º
[color=red]
# cd /usr/ports/multimedia/mplayer
# make WITH_GUI=yes WITH_FREETYPE=yes install clean
[/color]
ÉÏÃæµÄÃüÁîµÈ¼ÛÓÚ£º
[color=red]
# make -DWITH_GUI -DWITH_FREETYPE install clean
[/color]
Èç¹ûÄã¼Æ»®Ê¹ÓÃportupgradeÉý¼¶mplayer²¢ÏëʹÓÃͬÑùµÄ²ÎÊý£¬ ÄãÓÐÒ»¸öÑ¡Ôñ¡£ »òÕßÄãÓÐÄÜÁ¦¼ÇµÃÔÚʹÓÃportupgradeʱʹÓà m Õâ¸öÑ¡Ï
[color=red]
# portupgrade -rRm '-DWITH_GUI' '-DWITH_FREETYPE' mplayer
[/color]
»òÕß»¨Ò»µãʱ¼ä½«ÕâЩѡÔñ¼ÓÈëµ½/usr/local/etc/pkgtools/confÀ
[color=red]
MAKE_ARGS = {
'multimedia/mplayer-*' => 'WITH_GUI=1 WITH_FREETYPE=1',
}
[/color]
ÈÃÎÒÃÇ·Ö¿ªËüÃÇÀ´¿´¿´£¬ ËüÓе㸴ÔÓ²¢ÇÒÓï·¨Óе㽲¾¿¡£ Õû¸öMAKE_ARGS»á»°°üº¬ÔÚÒ»¸ö{ }Àï¡£ ÔÚÕâÀïÃæÊÇÿ¸öportsÏêϸµÄ make²ÎÊý¡£Ò²¾ÍÊÇÄã¿ÉÒÔ½«Ò»Ð©ports ¼ÓÈë½øÈ¥£¬ ²¢È·ÐÅËüÃǶ¼ÔÚÕâ¸öÀ¨ºÅÄÚ¡£
ÿ¸öports±ØÐë°üº¬ÔÚÒ»¶Ôµ¥ÒýºÅÀ²¢ÇÒÊÇ´ÓportsÀï·ÖÏÂÀ´µÄ×ÓĿ¼¡£ Ãû×Ö×îºóÃæ¸úͨÅä·û [color=red] -* [/color]¡£
make²ÎÊýÒ²±»·ÅÔÚÒ»¶Ôµ¥ÒýºÅÀï²¢¸úÔÚ [color=red] => [/color]ºóÃæ¡£ ¼ÇסʹÓÃ1´úÌæÊ¹Óõ¥´Êyes£¬ ËùÓеIJÎÊýÒÔ¿Õ¸ñ·Ö¿ª¡£
ÄãÐèÒª»¨Ò»µãʱ¼äÀ´½«ÄãµÄ²ÎÊý¼Ó½øÕâ¸ö»á»°ÖС£
[size=6][color=blue]Ports Tools[/color][/size]
ÈÃÎÒÃÇÀ´¿´¿´ports treeµÄ tools À´½áÊøÕâһϵÁаɣ¡ Èç¹ûÄãû·¢ÏÖÕâÒѾÓÐÁË£¬ Äã¿ÉÒÔ¿´¿´ÕâÀ
[color=red]
# more /usr/ports/Tools/scripts/README
[/color]
Gee, µ±ÄãÏëÒªÁ˽âËùÓйØÓÚportsµÄËùÓÐÇé¿öʱ£¬ Ä㽫ÔÚÄÇÀïÕÒµ½È«²¿Òþ²ØµÄÓÐÓù¤¾ß¡£ ËüÃǶ¼Êǽű¾Îļþ£¬ µ±ÄãÖ´ÐÐÕâЩÎļþʱ±ðÍü¼ÇÀïÃû×ÖÇ°Ãæ¼ÓÉÏ[color=red] ./ [/color]
[color=red]
# cd /usr/ports/Tools/scripts
# ./consistency-check
[/color]
½¨ÒéÄãÔËÐÐËùÓÐÄãÔÚÔĶÁREADMEÎļþÖнéÉܵĸÐÐËȤµÄ½Å±¾¡£ Èç¹ûÄãÕÒµ½Ò»Ð©Ï²°®µÄ½Å±¾£¬ Äã¿ÉÒÔ½«ËüÃÇcopyµ½ÄãµÄĿ¼»ò×öÒ»¸öµ½ ~/binϵķûºÅÁ¬½Ó¡£
ÎÒÏ£ÍûÄãϲ»¶ÕâЩʹÓÃports collectionsµÄÎÄÕ¡£ ÎÒ½«ÔÚÏÂÒ»¶Îʱ¼ä½«Ç°ÃæµÄһϵÁÐÎÄÕÂÐÞ¶©³ÉÒ»±¾Êé¡£
[color=blue][size=6]Çó¾È£¬ ÎÒÔÚ×îºóµÄÕâЩ¶Î·ÒëÔ½À´Ô½²î£¬ ÇëÐÖµÜÃǸÄÕý[/size][/color]
[color=green]
It's worth your while to spend the few minutes it takes to add your arguments to this section whenever you first build a port that uses arguments. You'll eventually upgrade that port, and it is highly unlikely that you'll even remember that it used arguments, let alone what those actual arguments were.
Ports Tools
Let's finish this series by peeking at the tools section of the ports tree. If you haven't discovered it on your own yet, take a look at:
% more /usr/ports/Tools/scripts/README
Gee, just when you thought you knew everything there was to know about ports, you find there's a whole new stash of useful utilities. Since these are all scripts, don't forget to put a ./ in front of the name as you try out each of the scripts:
% cd /usr/ports/Tools/scripts
% ./consistency-check
I'd suggest trying out each script that piques your interest as you read its description in the README file. If you find some new favorites, consider either copying them or symlinking them to ~/bin so they will be in your path.
I hope you've enjoyed the past few articles on the ports collection. I'll be taking a break from the series over the next few months in order to write a book. Stay tuned for more details.
[/color] :D ºÃÍÛ£¡
Ò³:
[1]