LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3321|回复: 7

[原创]以user权限在任意Linux发行版上装Gentoo Prefix (以Portage管理包的运行环境)

[复制链接]
发表于 2008-12-23 14:15:44 | 显示全部楼层 |阅读模式
参考文献:
http://www.gentoo.org/proj/en/gentoo-alt/prefix/
http://www.gentoo.org/proj/en/ge ... otstrap-solaris.xml
http://www.gentoo.org/proj/en/gentoo-alt/prefix/ecopy.xml

目的很简单,没有root权限,要装软件,configure到一半,缺lib,又要去装lib,……,每次还要改prefix,麻烦。

官网有2个例子,分别是针对Solaris 10和Mac OS X的,我遇到的集群是Cent OS 4.5的,CPU是Xeon 5335。
  1. $ lsb_release -a
  2. LSB Version:    :core-3.0-amd64:core-3.0-ia32:core-3.0-noarch:graphics-3.0-amd64:graphics-3.0-ia32:graphics-3.0-noarch
  3. Distributor ID: CentOS
  4. Description:    CentOS release 4.5 (Final)
  5. Release:        4.5
  6. Codename:       Final
  7. $ cat /proc/cpuinfo
  8. processor       : 0
  9. vendor_id       : GenuineIntel
  10. cpu family      : 6
  11. model           : 15
  12. model name      : Intel(R) Xeon(R) CPU           E5335  @ 2.00GHz
  13. stepping        : 7
  14. ...
复制代码

建议非苹果机的就按Solaris 10的那个来。

首先找个可写的路径,假设是 ~/gentoo
  1. $ export EPREFIX="$HOME/gentoo"
  2. $ export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:$PATH"
复制代码
下载 http://overlays.gentoo.org/proj/ ... refix.sh?format=txt
得到bootstrap-prefix.sh。
  1. $ chmod 755 bootstrap-prefix.sh
  2. $ ./bootstrap-prefix.sh $EPREFIX tree
  3. $ ./bootstrap-prefix.sh $EPREFIX/tmp wget
  4. $ ./bootstrap-prefix.sh $EPREFIX/tmp sed
  5. $ ./bootstrap-prefix.sh $EPREFIX/tmp python
  6. $ ./bootstrap-prefix.sh $EPREFIX/tmp coreutils
  7. $ ./bootstrap-prefix.sh $EPREFIX/tmp findutils3
  8. $ ./bootstrap-prefix.sh $EPREFIX/tmp tar
  9. $ ./bootstrap-prefix.sh $EPREFIX/tmp patch
  10. $ ./bootstrap-prefix.sh $EPREFIX/tmp grep
  11. $ ./bootstrap-prefix.sh $EPREFIX/tmp gawk
  12. $ ./bootstrap-prefix.sh $EPREFIX/tmp bash
  13. $ ./bootstrap-prefix.sh $EPREFIX portage
  14. $ export LDFLAGS="-L${EPREFIX}/usr/lib -R${EPREFIX}/usr/lib -L${EPREFIX}/lib -R${EPREFIX}/lib"
  15. $ export CPPFLAGS="-I${EPREFIX}/usr/include"
复制代码
想装64位的就在 LDFLAGS 后面加上64位的库路径, -R 和 -L 都加。
我是:
  1. $ export LDFLAGS="-L${EPREFIX}/usr/lib -R${EPREFIX}/usr/lib -L${EPREFIX}/lib -R${EPREFIX}/lib -R/usr/lib64 -L/usr/lib64 -R/lib64"
复制代码
还要:
  1. $ export CC="gcc -m64"
  2. $ export CXX="g++ -m64"
  3. $ export HOSTCC="gcc -m64"
复制代码

gcc设好了。
再让bash去认新$PATH :
  1. $ hash -r
复制代码
  1. $ export USE="-nls -berkdb -gdbm"
  2. $ emerge --oneshot sed
  3. $ emerge --oneshot --nodeps wget
  4. $ emerge --oneshot =bash-3.2_p17-r1
复制代码
这里如果说"1 config files in XXX need updating"之类就先无视。
  1. $ emerge --oneshot --nodeps baselayout-prefix
  2. $ emerge --oneshot --nodeps flex
  3. $ emerge --oneshot --nodeps binutils-config
  4. $ emerge --oneshot --nodeps binutils
  5. $ emerge --oneshot --nodeps gcc-config
  6. $ emerge --oneshot --nodeps gcc
复制代码
注意一定要按顺序一个个来,因为emerge无法正确排这个顺序。
  1. $ unset LDFLAGS CPPFLAGS CHOST CC CXX HOSTCC
  2. $ emerge --oneshot coreutils
  3. $ emerge --oneshot findutils
  4. $ emerge --oneshot tar
  5. $ emerge --oneshot grep
  6. $ emerge --oneshot gawk
  7. $ emerge --oneshot patch
  8. $ emerge --oneshot make
复制代码
接着是装新portage,同时覆盖旧的:
  1. $ rm $EPREFIX/usr/share/man/man1/{env-update,quickpkg,dispatch-conf,repoman,emerge,emaint,ebuild,etc-update}.1
  2. $ env FEATURES="-collision-protect" emerge --oneshot portage
复制代码
基本系统完成。
  1. $ rm -Rf $EPREFIX/tmp/*
  2. $ hash -r
  3. $ emerge --sync
  4. $ emerge -u system
复制代码
自己写make.conf,比如:
  1. $ echo 'USE="unicode nls"' >> $EPREFIX/etc/make.conf
  2. $ echo 'CFLAGS="-O2 -pipe"' >> $EPREFIX/etc/make.conf
  3. $ echo 'CXXFLAGS="${CFLAGS}"' >> $EPREFIX/etc/make.conf
复制代码
我的是:
  1. USE="unicode nls -alsa"
  2. CHOST="x86_64-pc-linux-gnu"
  3. CFLAGS="-march=nocona -O2 -pipe"
  4. CXXFLAGS="${CFLAGS}"
  5. PORTAGE_TMPDIR=/var/tmp
  6. MAKEOPTS="-j8"
  7. PORTAGE_ELOG_CLASSES="warn error log"
复制代码
然后就是 -e 了:
  1. $ unset USE
  2. $ emerge -e system
复制代码
我是开screen后干的 -e 。

最后:
  1. $ cd $EPREFIX/usr/portage/scripts
  2. $ ./bootstrap-prefix.sh $EPREFIX startscript
复制代码
然后把生成的startscript
拷到自己方便的地方。
执行 ./startscript 就可以用了。

如果装的包不在
  1. svn+http://overlays.gentoo.org/svn/proj/alt/trunk/prefix-overlay
复制代码
那就要用 ${EPREFIX}/usr/portage/scripts/ecopy 来从主库中弄:
  1. % export PATH="${PATH}:${EPREFIX}/usr/portage/scripts"
  2. % cd "${EPREFIX}"/usr/local/portage/my-overlay
  3. % ecopy app-office/openoffice
复制代码
当然要在make.conf中加上:
  1. PORTDIR_OVERLAY=/home/xxx/gentoo/usr/local/portage/my-overlay
复制代码
我没有直接用${EPREFIX},建议还是写绝对路径。

由于必须指定完整的包名,像"app-office/openoffice"这样,所以,谁知道如何弄一份列表?
或者是把portage-20081220.tar.bz2只解压路径,不解压文件 ?
 楼主| 发表于 2008-12-23 14:17:26 | 显示全部楼层
加一句,~/.bashrc 还是会处理的,所以可以用来写些东西。
回复 支持 反对

使用道具 举报

发表于 2008-12-23 14:23:13 | 显示全部楼层
不错,我期待有这样的工具很久了
回复 支持 反对

使用道具 举报

发表于 2008-12-23 15:16:42 | 显示全部楼层
我才刚发现有个精彩程度投票的功能
回复 支持 反对

使用道具 举报

发表于 2008-12-23 17:11:02 | 显示全部楼层
太好了,没想到楼主出精华贴了
狂赞一下

再 [ code ]  [ /code] 适当排版一下就更巴适了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-23 19:00:42 | 显示全部楼层
官网说大部分ebuild可以自动转换。我遇到3个不行的。 flagedit、libconf和R。
自己解决了前2个,第三个只好交bug了……
flagedit是要加patch,libconf只改ebuild就可以了。
回复 支持 反对

使用道具 举报

发表于 2009-2-17 10:30:14 | 显示全部楼层
[color="Silver"]发现在教育网还缓存有 for linux 的文档,不知道为什么官方文档不更新维护了
http://edu.gentoo-cn.org/proj/en ... bootstrap-linux.xml

原来已经有更好的文档了,直接bin安装:
http://dev.gentoo.org/~darkside/ ... ootstrap-gentoo.xml


正在安装 prefix ,本来想发帖的,没想楼主抢先了。
回复 支持 反对

使用道具 举报

发表于 2009-7-1 21:19:50 | 显示全部楼层
这贴总结的好,比官方文档还好用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表