ºìÁªLinuxÃÅ»§
Linux°ïÖú
µ±Ç°Î»ÖÃ: ºìÁªLinuxÃÅ»§ > Ubuntu

ÖØ½¨ÊÀ½ç£¡ÓÃapt-buildÖØÐ±àÒë°²×°ubuntuÉÏËùÓÐÈí¼þ°ü

·¢²¼Ê±¼ä:2007-12-11 21:18:34À´Ô´:ºìÁª×÷Õß:compat
Ô­ÎÄÕ³ö´¦http://cnyegle.spaces.live.com/Blog/cns!7F95890C0E67568D!426.entry

Ò»¸öLinuxÊÀ½çµÄ²ËÄñ£¬»òÕßÒ»¸öÔÚÆäÖÐ÷éÕ½Ðí¾ÃµÄսʿ¡£ÎÞÂÛÈçºÎ£¬Äã²¢²»Çå³þDebianÈí¼þ°ü¹ÜÀíϵͳµÄ¹¤×÷Ô­Àí£¬²¢¾ªÆæÓÚ¾ÓÈ»ÄÜͨ¹ý¸ÃϵͳÒÔÍêÈ«ÕýÈ·µØ½â¾öÉý¼¶¡¢ÒÀÀµ¹ØÏµµÄ·½Ê½À´°²×°³ÌÐò¡£°²×°Ò»¸ö³ÌÐòµÄ·½·¨ÓУºµÚÒ»ÖÖÊÇÏÂÔØtarball°ü£¬½âѹËõ£¬ÔËÐÐconfigure½Å±¾£¬ÔËÐÐ make install¡£Õâ¶ÔËùÓÐlinuxÓû§À´Ëµ¶¼ÊÇÒ»¼þ¼òµ¥µÄÊ£¬µ«¶ÔÓÚDebian°ü¹ÜÀíϵͳÀ´Ëµ²¢²»Êʺϡ£µÚ¶þÖÖ·½·¨ÊÇʹÓà stow,ÓÃÀ´¸üºÃµØ½â¾öÉý¼¶ÎÊÌâ¡£µ«ÊÇstow²¢²»ÄÜÍê³ÉÒÀÀµ¹ÜÀí¡£×îÖÕ¼«µÄ½â¾ö·½·¨ÊÇʹÓÃapt-buildÀ´ÖØÐ±àÒëÄÇЩÒѾ­±àÒë³Édeb°üµÄÈí¼þ¡£

Try it and you will adopt it
On the first day, it created the repository
Òª°²×°apt-buildÊäÈë
sudo apt-get install apt-build
Ò»µ©°²×°ºÃºó£¬ºóÐøµÄ°²×°½Å±¾»áѯÎÊÄ㼸¸öÎÊÌ⣬buildĿ¼£¬µ÷ÓÃgccʱʹÓõÄÑ¡Ï´¦ÀíÆ÷¼Ü¹¹µÈµÈ¡£ÕâЩÐÅÏ¢½«±»Ð´Èëµ½/etc/apt/apt-build.conf¡£Èç¹ûÔڻشðʱ³ö´íÁË£¬Äã¿ÉÒÔÖ±½ÓÐ޸ĸÃÎļþÀ´¸üÕý¡£ÕâÀïÊÇÒ»¸öÀý×Ó£º

[yegle@yegle-laptop]~ $ cat /etc/apt/apt-build.confbuild-dir = /var/cache/apt-build/buildrepository-dir = /var/cache/apt-build/repository

Olevel = -O3

march = -march=pentium2

mcpu = -mcpu=pentium2options =

¹ØÓÚÕâÀïµÄbuild-dirºÍrepository-dir±äÁ¿£¬ÇëÈ·±£ÊäÈëµÄĿ¼ËùÔڵķÖÇøÓнϴóµÄÊ£Óà¿Õ¼ä¡£¾ø´ó¶àÊý£¨ËùÓУ¿£©µÄÈí¼þ°ü²ÉÓõÄÊǵڶþ¼¶µÄÓÅ»¯ÉèÖã¬Òò´ËÈç¹ûÄãÑ¡ÔñÁ˵ÚÈý¼¶µÄÓÅ»¯£¬²¢ÇÒÖ¸³öÁËÄãµÄ CPUÊôÓÚÄÄÒ»Àà¼Ü¹¹£¬Èí¼þÔËÐеÄЧÂʽ«»áÓÐËùÌáÉý¡£ÏÖÔÚGentoo fans»áÎÊÎÒÁË£º ¡°flagÔÚÄÄ£¿¡± £»·Ç³£±§Ç¸£¬Ã»ÓС£ GentooÓû§Ìáµ½flagʱ£¬Ö¸µÄÊÇÓëÈí¼þÏà¹ØµÄ¿âÎļþ¡£ÔÚÕâÀÐÞ¸ÄÈí¼þ°üµÄÒÀÀµ²¢²»ÊÇÒ»¸ö¼òµ¥Óû§ÌÖÂÛµÄÎÊÌâ¡£²¢ÇÒ£¬Èç¹ûÄãÕâô×öÁË£¬¿ÉÄÜ»á³öÏÖÔÚԭʼÈí¼þ°üÖÐûÓеĴíÎó¡£µ±³öÏÖÕâÖÖ´íÎóʱ£¬²»±ØÏò¿ª·¢Õ߻㱨bugÁË£¬ÒòΪÄã²¢²»ÊÇÔÚʹÓùٷ½µÄDebian°ü£¬¶øÊÇÄã×Ô¼ºµÄ¡£×îºó£¬ÄãÐèÒªÔÚ /etc/apt/sources.listÖÐÌí¼ÓÒ»ÐУ¬Èç¹ûûÓеϰ£º
deb-src ftp://debian_mirror/ [stable|testing|unstable] main contribÒëÕß×¢£ºUbuntuÓû§Ìí¼ÓÏà¹ØµÄdeb-srcÔ´¼´¿É£¬È磺

deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/

gutsy main restricted universe multiverse

deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse

deb-src

http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse

deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse

ÔËÐÐapt-get update ¸üб¾µØµÄÈí¼þ°üË÷ÒýÎļþ¡£ÏÖÔÚÄãÒѾ­×¼±¸ºÃʹÓÃapt-buildÁË¡£

And now, what do we do?
ÏÖÔÚÎÒ½«Ïêϸ½â˵apt-buildµÄÖ÷ÒªÃüÁî¡£ÊÂʵÉÏ£¬ºÍapt-getºÜÏó£¬apt-buildÒ²Óйؼü´Ê£¬ÀýÈç update, upgrade, install, source, clean-build¡£

Ê×ÏÈ£¬update ÃüÁËü»á¸üÐÂÈí¼þ°üË÷ÒýÎļþ£¨Î»ÓÚ/var/lib/apt/listsÖУ©¡£upgradeÃüÁ¸üÐÂËùÓÐÈí¼þ°ü¡£ÏÂÃæÓÃÒ»¸öÀý×ÓÀ´½â˵install£º

[yegle@yegle-laptop]~ $ sudo apt-build install memstat
---> Installing build dependencies (for memstat) <---Reading Package Lists¡­ DoneBuilding Dependency Tree¡­ Done

0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.---> Downloading memstat source (memstat) <---

Reading Package Lists¡­ Done

Building Dependency Tree¡­ Done

Need to get 22.4kB of source archives.

Get:1 ftp://127.0.0.1

1.0.4/main memstat 0.4-1 (dsc) [482B]

Get:2 ftp://127.0.0.1 1.0.4/main memstat 0.4-1 (tar) [21.9kB]

Fetched 22.4kB in 0s (322kB/s)

dpkg-source: extracting memstat in memstat-0.4

---> Building memstat <---

¡­

¡­

¡­

dpkg-genchanges: binary-only upload - not including any source code

dpkg-buildpackage: binary only upload (no source included)

---> Moving packages to repository <---

---> Updating repository <---

Using: -O3 -mcpu=pentium2 -march=pentium2

¡­

¡­

Reading Package Lists¡­ Done

Building Dependency Tree¡­ Done

Reading Package Lists¡­ Done

Building Dependency Tree¡­ Done

The following NEW packages will be installed:

memstat

ÎÒÃÇ¿ÉÒÔ¿´µ½apt-build×öÁËÒÔÏµĹ¤×÷£º°²×°±àÒëËùÐèµÄÈí¼þ°ü£¬ÏÂÔØÔ´´úÂ룬Ȼºó±àÒë²¢°²×°ÒѱàÒëµÄÈí¼þ°ü¡£µ±ÄãÏë×Ô¼ºÖØÐ´ò°üʱ£¬dpkg- buildpackage²¢²»ÄÜÏñapt-buildÒ»Ñù×Ô¶¯°²×°ËùÐèÒÀÀµ°ü£¬²¢ÇÒÖØÐ±àÒë¿ÉÄܺÜÄѲ¢¿ÉÄÜÐèҪһЩÎÒÃÇÃ»ÕÆÎյļ¼ÇÉ¡£µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇ¿´µ½ÁËÒ»¸öΪÁËÓÅ»¯Èí¼þ¶øÖرàÒëµÄ¼òµ¥µÄÀý×Ó£¬µ«ÊÇÈç¹ûÎÒÃÇÏëÐÞ¸ÄÔ´´úÂ룬Ð޸ĹæÔòÎļþ»òÕ߯äËûÔÚdebian/Îļþ¼ÐϵÄÎļþ£¬apt-build½«±äµÃºÜÓÐÓ㬲¢ÇÒ½«´øÄãä¯ÀÀÒ»¸öÈí¼þ°üµÄºËÐÄ¡£ÎÞÂÛÈçºÎ£¬ÎÒ¶¼ÍƼöÄã¿´¿´Õâ¸ö maintainer guide.

What else?
ÈÃÎÒÃÇ¿´¿´Õâ¸öÃüÁ source¡£Ëü²¢Ã»ÓÐʲôÉñÆæµÄµØ·½£¬Ëü»áÏÂÔØÔ´´úÂ룬ÒÔ¼°°üº¬debian/Ŀ¼£¨Ä㽫´ÓÖÐÕÒµ½½¨Á¢Èí¼þ°üËùÐèµÄÎļþ£¬rules£¬control£¬ changelog filesµÈµÈ£©µÄdiffÎļþ£¬½«ËûÃÇ·ÅÔÚbuildÎļþ¼Ð£¬½âѹËõ²¢×îÖÕÓÃdiffÎļþΪËü´òÉϲ¹¶¡¡£Àý×Ó£º

[yegle@yegle-laptop]~ $ sudo apt-build source ethereal---> Downloading ethereal source (ethereal) <---Reading Package Lists¡­ Done

Building Dependency Tree¡­ Done

Need to get 6170kB of source archives.Get:1 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (dsc) [821B]

Get:2 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (tar) [6154kB]

Get:3

ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (diff) [14.6kB]

Fetched 6170kB in 1s (3533kB/s)

dpkg-source: extracting ethereal in ethereal-0.10.4

ÎÒÃÇ×¢Òâµ½µÚÈý¸öÎļþµÄÏÂÔØ£¬Èí¼þ°üÃèÊöÎļþ¡£ÏÖÔÚÄãÓÐÈí¼þÔ´´úÂ룬ÒÔ¼°½¨Á¢Èí¼þ°üËùÐèµÄÎļþºÍdebian/Îļþ¼Ð£¬¿ÉÒÔ°´ÕÕÄã×Ô¼ºµÄÒâÔ¸ÐÞ¸ÄÀ´Ôö¼Ó»ò¼õȥѡÏî¡£µ±ÐÞ¸ÄÍê³Éʱ£¬Äã¿ÉÒÔÓÃapt-build install modified_packageÃüÁîÀ´°²×°Õâ¸öÈí¼þ¡£µ«ÊÇ£¬ÔÚ֮ǰÒѾ­Ìáµ½ÁË£¬ÄãÔÚÓÃÄã×Ô¼ºµÄÈí¼þ°ü£¬ÄãµÄÐ޸ĿÉÄܵ¼ÖÂеĴíÎó¡£Èç¹ûÄã²»ÖªµÀÄã×Ô¼ºÔÚ¸ÉÂÐÞ¸ÄÈí¼þ°ü½«ÊÇÒ»¼þºÜΣÏյŤ×÷¡£

Ö÷ÒªµÄÑ¡ÏîÒѾ­Ìá½»£¬µ«ÊÇijЩСѡÏîÒÀÈ»ÄÜÔì³ÉºÜ´óµÄ²»Í¬£¬Ïñ£ºclean-build, µÈ¼ÛÓÚcleanÖ®ÓÚapt-getµÄ¹ØÏµ£¬Ëü½«ÇåÀíbuildÎļþ¼Ð£¬¶ø²»ÊÇrepositoryÎļþ¼Ð¡£Äã¿ÉÒÔͨ ¹ýremoveÀ´É¾³ýÒ»¸öÈí¼þ°ü£¬»òÕßͨ¹ýinfo À´»ñÈ¡Èí¼þ°üµÄÏà¹ØÐÅÏ¢¡£

×îºó£¬ÔĶÁÒ»ÏÂapt-buildµÄÓû§ÊֲᣬÀïÃæ°üº¬ÁËһЩÓÐȤµÄÑ¡Ïî¡£µ«ÊÇÎÒ°Ñ×²ÊµÄ²¿·ÖÁôÔÚÁË×îºó¡£

With if we can redo the world, with apt-build too!
The devil is among us!
ÎÒ½«Ìáµ½µÄ×îºóÒ»¸öÃüÁîÊÇworld£¬Õ⽫Èúܶàϲ°®ÎÒÃǺìÉ«»ï°é£¨BSDµÄ¼ªÏéÎÒëÕß×¢£©µÄÈËÏëÆðһЩ¶«Î÷¡£ÊÂʵÉÏ£¬ÔÚBSDϵͳÉÏ£¬Äã¿ÉÒÔÖØÐ±àÒëËùÓеÄports£¬Ö»ÐèÒªÇл»Ä¿Â¼µ½/usr/ports/²¢ÊäÈëmake world¡£Õâ¸ö¸ÅÄî±»apt-buildµÄ×÷Õß²ÉÓ㬵±ÄãÏëÖØ½¨ÊÀ½çʱ£¬Õâ¸öÃüÁî»á´ø¸øÄãÏëÒªµÄ¶«Î÷£º

[yegle@yegle-laptop]~ $ sudo apt-build world-----> Rebuilding the world ! <-----You should read README.Debian first
ÔĶÁÕâ¸öÖøÃûµÄREADMEËÆºõÊÇÇ¿ÖÆµÄ£¬ÎÒÃÇ´ÓÖеÃÖªÎÒÃÇÐèÒª½¨Á¢Ò»¸öÈí¼þ°üÁÐ±í£¬ÆäÖаüº¬ÎÒÃÇÏëͨ¹ýÔ´ÂëÖØ½¨°²×°µÄÈí¼þ°ü¡£ÁбíÖÐÓ¦¸Ãɾ³ýһЩÃô¸ÐµÄÈí¼þ°üÈçgcc£¬libc6ÒÔ¼°ÆäËû¹Ø¼üµÄÈí¼þ°ü¡£Í¨¹ýÒÔÏÂÃüÁÁ¢Õâ¸öÁÐ±í£º

£¨ÏÈÔËÐÐsudo su£¬ÒëÕß×¢£©root@yegle-laptop:~ # dpkg --get-selections | awk '{if ($2 == "install") print $1}' > /etc/apt/apt-build.list
µ±ÁÐ±í½¨Á¢ºÃʱ£¬¾Í¿ÉÒÔͨ¹ýapt-build worldÖØ±àÒë¼°ÓÅ»¯ÏµÍ³¡£

And now, this is dramatical !
ÄãÓÃapt-buildÀ´½¨Á¢×Ô¼ºµÄÈí¼þ°ü£¬µ«µ±Äãͨ¹ýapt-get dist-upgradeÉý¼¶ºó£¬ÄãDIYµÄÒ»¸öƯÁÁµÄÈí¼þ°ü±»Ò»¸ö¹Ù·½°æ±¾¸øÈ¡´úÁË£¬Õæ¿Éϧ£¡Äã¿ÉÒÔͨ¹ýapt-buildÐÞ¸ÄÄã×ÔÖÆÈí¼þµÄ×èÈûÖµÀ´±ÜÃâÕâÖÖÇé¿ö¡£ÒªÏëͨ¹ýapt-buildÀ´¸øÄãµÄ×ÔÖÆÈí¼þ°üÒ»¸ö½Ï¸ßµÄÓÅÏȼ¶£¬ÄãÐèÒªÐÞ¸Ä /etc/apt/preferences¡£ Àý£º

Package: * Pin: release o=apt-buildPin-Priority: 990
ÕâÑù£¬Äã¾Í²»Óõ£ÐÄÒ»´Îdist-upgrade»áÓùٷ½°üÌæ»»Äã×Ô¼ºµÄ°üÁË¡£ÔËÐÐapt-cache policyÀ´¼ì²éÈí¼þÔ´µÄÓÅÏȼ¶¡£Êä³öµÄ½á¹û¸ñʽÈçÏ£º

[yegle@yegle-laptop]~ $ apt-cache policyPackage Files:100 /var/lib/dpkg/status

release a=now

500 http://ftp2.de.debian.org sid/non-free Packages

release o=Debian,a=unstable,l=Debian,c=non-free origin ftp2.de.debian.org

500 http://ftp2.de.debian.org sid/contrib Packages

release o=Debian,a=unstable,l=Debian,c=contrib

origin ftp2.de.debian.org

500 http://ftp2.de.debian.org sid/main Packages

release o=Debian,a=unstable,l=Debian,c=main

origin ftp2.de.debian.org

990 file: apt-build/main Packages

release o=apt-build,a=apt-build,l=apt-build,c=main

Pinned Packages:

ͨ¹ýÈí¼þ°ü×èÈûÖµÀ´½â¾öÕâ¸öÎÊÌâºÜ¼ò½à¡£µ«ÊÇ£¬½÷É÷¶Ô´ýºóÐøµÄ¸üС£ÊÂʵÉÏ£¬Èç¹ûÄã¾ö¶¨Öؽ¨Ò»¸ö±»ºÜ¶àÈí¼þÒÀÀµµÄlib£¬²¢ÇÒÄã²»Éý¼¶Ëü£¬Ëü½«×èÖ¹ºÜ¶àÈí¼þµÄÉý¼¶¡£Òò´Ë£¬¶à¹Ø×¢Äã¹ØÐĵÄÈí¼þµÄÉý¼¶Çé¿ö¡£

What time is it? 15 past midnight ?
¸ÃÊǽáÊøµÄʱºòÁË£¬ÎÒÏ£ÍûÎÒÒѾ­¸øÄãʹÓÃapt-build----Ò»¸öÓÐÓò¢ÇÒÓÐȤµÄ¹¤¾ß----µÄÆÈÇиС£ÎÒÒ²Ï뾯¸æÄ㣬³ÌÐò×÷ÕߺÜСÐĵØÈ°Äã²»ÒªÖØÐ±àÒë gcc¼°ÆäËûһЩÈí¼þ°ü¡£ÎÒºÍËû¶¼²»¶ÔÄãµÄÓÞ´À¸ºÔð¡£ËùÒÔÈç¹ûÄã°ÑÄãµÄDebian¸ø¡±É±ËÀ¡±ÁË£¬±ðÏòÎÒдÐÅ£¨³ý·ÇÄãÏ붺ÎÒ·¢Ð¦£©¡£×¢Òâapt- build²¢²»»á¡±·¢Ã÷¡±ÐµÄÈí¼þ°ü£¬Èç¹ûÄãÏë°²×°µÄÈí¼þ²¢Ã»ÓÐΪDebian´ò°ü£¬apt-build²¢²»ÄÜ´ÓDebian¾µÏñÏÂÔØÔ´´úÂë²¢±àÒëËûÃÇ£¨ÄãÐèÒªÇëÇó´ò°ü²¢µÈ´ýÕâ¸öÇëÇó±»½ÓÊÜ£©¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ