LinuxSir.cn,穿越时空的Linuxsir!

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

[==LFS精华系列==]在lfs里安装portage

[复制链接]
发表于 2003-3-19 16:38:15 | 显示全部楼层 |阅读模式
最近把 portage 安装到 LFS 里.这是我的安装过程..
再此之前按BLFS安装python2.2 和 到网上下载rsync 安装
首先找个 portage 的 ebuild.. 按 ebuild 里的下载地址下载 portage-2.0.47-r10 这是我下载的版本..
解压后..从 ebuild 的 src_compile() 开始按照 ebuil 的脚本安装.
最好你能看明白 ebuild 文件..和 shell script 没什么区别.
src_compile() {
        cd ${S}/src; gcc ${CFLAGS} tbz2tool.c -o tbz2tool
        cd ${S}/src/sandbox-1.1
        if [ "${ARCH}" = "x86" ]; then
                make CFLAGS="-march=i386 -O1 -pipe" || die
        else
                make || die
        fi
在这里 ${S} 代表解压后源代码的路径.
(1) 在 ${S}/src 目录里执行 gcc  tbz2tool.c -o tbz2tool

因为我们并没有建立过portage.在目录/etc里没有make.conf 和 make.globals..所以不要 ${CFLAGS} ..也可以用自己的优化参数代替.

(2) 在 ${S}/src/sandbox-1.1目录里执行 make CFLAGS="-march=i386 -O1 -pipe"

src_install() 这段太长了.我就不列...
   有几个命令介绍一下 insinto /etc 代表下面的 newins 和 doins 命令复制文件到 /etc 这个目录
   newins 和 doins 就是把命令之后的文件安装(复制)到 insinto 指定的目录

(3) 把 ${S}/cnf 里的 make.globals  make.conf  etc-update.conf dispatch-conf.conf 这几个文件复制到/etc
     目录里

(4) 在 ${S}/src/python-missingos 目录里执行以下命令:
     chmod +x setup.py
     ./setup.py install --root /
     在--root / 里是默认的安装路径.就是ebuild file在/usr/portage

(5) 在${S}/pym 目录里.把xpak.py portage.py output.py 这几个文件复制到/usr/lib/python2.2/site-packages
     目录里.
   
(6) 建立 /usr/lib/portage/bin 这些目录. 并把 ${S}/bin 里的文件都复制到 /usr/lib/portage/bin 把全部文件
     设置为可执行.复制刚才编译的 ${S}/src/tbz2tool 到 /usr/lib/portage/bin ..在目录 /usr/lib/portage/bin 里
     执行 ln -s  emake /usr/lib/portage/bin/pmake 建立个连接

(7) 在 ${S}/src/sandbox-1.1 里执行 make DESTDIR=/ install 安装 sandbox 库到 /lib 里

(8) 为/usr/lib/portage/bin 里的文件做个连接到 /usr/bin 或 /usr/sbin 下面就是从ebuild里拿出来的:
        
        dosym ../lib/portage/bin/emerge /usr/bin/emerge
        dosym ../lib/portage/bin/pkgmerge /usr/sbin/pkgmerge
        dosym ../lib/portage/bin/ebuild /usr/sbin/ebuild
        dosym ../lib/portage/bin/ebuild.sh /usr/sbin/ebuild.sh
        dosym ../lib/portage/bin/etc-update /usr/sbin/etc-update
        #dosym /usr/lib/portage/bin/portage-maintain /usr/sbin/portage-maintain
        dosym ../lib/portage/bin/env-update /usr/sbin/env-update
        dosym ../lib/portage/bin/xpak /usr/bin/xpak
        dosym ../lib/portage/bin/repoman /usr/bin/repoman
        dosym ../lib/portage/bin/tbz2tool /usr/bin/tbz2tool
        dosym ../lib/portage/bin/g-cpan.pl /usr/bin/g-cpan.pl
        dosym ../lib/portage/bin/quickpkg /usr/bin/quickpkg
        dosym ../lib/portage/bin/regenworld /usr/sbin/regenworld
        dosym ../lib/portage/bin/emerge-webrsync /usr/sbin/emerge-webrsync
        dosym ../lib/portage/bin/dispatch-conf /usr/sbin/dispatch-conf
        dosym newins /usr/lib/portage/bin/donewins

     dosym 就是建立符号连接 ..上面列出的都需要建立符号连接..我为了省事..把/usr/lib/portage/bin加
     到PATH里.(因为我emerge rsync 之后就运行 emerge --nodeps portage..)

(9) 执行 python -c 'import portage; portage.counter_tick_core("/")'  作用我不知道..在ebuild   
     file里的pkg_postinst()  ..好像是建立/var/cache/edb/counter.如果不可以的话..就自己建立.
     
(10) 建立/var/tmp 和/var/cache/edb目录 ..
     在/var/cache/edb 目录里用cat建立个新文件: counter
     我原来是用 touch  建立的..结果在emerge rsync 的时候出错了..这文件的作用我不知道..可以参考我的:
     
     [root@sleeve /var/cache/edb]# cat counter
     81[root@sleeve /var/cache/edb]#

(11) 在/etc/passwd 里加入这一行:
       portage:x:250:250:portage:/var/tmp/portage:/bin/false
       在/etc/group 里加入这两行
       wheel:x:10:root
       portage::250:portage
       主意用户组和用户的ID.不要和现存的相同..当然你也可以用useradd和groupadd 建立..因为portage
       在编译软件的时候是用portage这个用户去编译的.
       建立/var/tmp/portage 这个目录..并把这目录的所有权改为portage
      
现在应该可以执行emerge rsync了....如果有出现问题的话.详细看看出错信息..或贴出来..

rsync后..按照 /usr/portage里tar 的ebuild 下载重新安装tar.记住打上gentoo给的patch. 不是所有人都需要
做这步.因为我的LFS里的tar不支持 --no-same-owner 选项.emerge在下载软件解压会用到该选项设置解压
文件后的用户属性. 需要在/usr/portage/profiles/ 把 default-x86-1.4 做个符号连接到/etc 为make.profile

建立 /etc/env.d 目录.. 该目录是env-update命令用到的.env-update会根据/etc/env.d 目录里的文件内容设置
/etc/ld.so.conf文件..因为emerge 安装一个软件后都会执行env-update..就会把/etc/ld.so.conf里的库路径更新
至于这目录里的文件可以自己建立..文件名格式和文件内容格式都很简单.这是我的你可以参考一下:

[root@sleeve /etc/env.d]# ls

00basic     100i18n    10xfree  45qt-docs3  49kdelibs-3.1  70less
01hostname  10mozilla  40vim    46gnome     50qtdir3       90vmware
05gcc       10rar      45qt3    46gnome2    56kdedir-3.1   99kde-env

[root@sleeve /etc/env.d]# cat 45qt3
PATH=/opt/qt-3.1.1/bin
ROOTPATH=/opt/qt-3.1.1/bin
LDPATH=/opt/qt-3.1.1/lib
QMAKESPEC=linux-g++

[root@sleeve /etc/env.d]# cat 49kdelibs-3.1
PATH=/opt/kde/bin
ROOTPATH=/opt/kde/sbin:/opt/kde/bin
LDPATH=/opt/kde/lib
CONFIG_PROTECT=/opt/kde/share/config

[root@sleeve /etc/env.d]# cat 10xfree
PATH=/usr/X11R6/bin
ROOTPATH=/usr/X11R6/bin
LDPATH=/usr/X11R6/lib
MANPATH=/usr/X11R6/man
INFODIR=/usr/X11R6/info
XINITRC=/etc/X11/xinit/xinitrc
CONFIG_PROTECT=/usr/X11R6/lib/X11/xkb

[root@sleeve /etc/env.d]# cat ../ld.so.conf
# ld.so.conf autogenerated by env-update; make all changes to
# contents of /etc/env.d directory
/usr/local/lib
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2
/usr/lib/mozilla
/usr/X11R6/lib
/opt/qt-3.1.1/lib
/opt/gnome/lib
/opt/gnome2/lib
/opt/kde/lib

重要的是文件里LDPATH的设置..env-update 根据这变量设置/etc/ld.so.conf

我用emerge安装了整个gnome2.没出现问题..但gnome2不太好用.我又用emerge把gnome2给删除了.
因为LFS里有很多软件的安装路径和gentoo不同.所以很多软件在configure总有找不到已经安装的包.
例如 gentoo 里的qt 是安装在/usr/qt/3里..而lfs是安装在/opt/qt3里..我还不熟悉gentoo的安装目录设置..
所以就 ln -s /opt/qt3 /usr/qt/3 这样解决.

安装了好几个包管理软件..比较麻烦的就是portage..debian的apt&dpkg 还好..但用了一下apt&dpkg 就觉
得 passion 老大说得没错..debian是为懒人设计的.的确..我只要用 apt-get 就可以把现在的lfs变成debian了.
而..emerge system..就..呵呵..gentoo.....最近论坛老在讨论那个linux好..其实都一样..有某方面的改善无非是
些拆东墙补西墙的东西...都是GNU的软件..都是那个内核.这么多的发行版最大的区别就在于包管理..
发表于 2003-3-19 17:42:21 | 显示全部楼层
好文章!对发行版的分析也很准啊,其实都是一个妈的孩子。
发表于 2003-4-12 03:47:35 | 显示全部楼层
doexe ${S}/src/tbz2tool
你好像漏了一点。
我也装上了,不过不想搞成gentoo的,只好用-O来emerge了。
发表于 2003-4-12 14:11:29 | 显示全部楼层
sleeve,你能用portage编译需要qt的程序么?我已经改过了env.d下面和kde,qt相关的东东,不过编译qt的程序老是找不到库,手动编译就行了,奇怪ing
 楼主| 发表于 2003-4-12 15:15:15 | 显示全部楼层
可以..我的已经说过了呀...


因为LFS里有很多软件的安装路径和gentoo不同.所以很多软件在configure总有找不到已经安装的包.
例如 gentoo 里的qt 是安装在/usr/qt/3里..而lfs是安装在/opt/qt3里..我还不熟悉gentoo的安装目录设置..
所以就 ln -s /opt/qt3 /usr/qt/3 这样解决.
发表于 2003-4-12 15:37:17 | 显示全部楼层
是啊,呵呵,但你这样用symlink的话,前缀有点问题啊,因为你的程序是装在/usr/qt/3下的,如果没有了这个,就不能运行了.而如果是装在/opt/qt下,那么就不会这样,取消了symlink,也还能运行的.
 楼主| 发表于 2003-4-12 16:36:33 | 显示全部楼层
如果不是kde包带的多数装到/usr里去..
gentoo都会把一些大包放到特定的目录....还好大的包就那几个而已
竟然 USE 能添加 qt 或其他的支持..能否设置qt的路径呢..
要不安装前改ebuild看看..也只能 这样了..
发表于 2003-4-13 15:31:58 | 显示全部楼层
嘿嘿,我现在这样用portage:
装了个kportage,然后只用portage来下载软件包(frechonly),再看一下ebuild,有没有什么patch,最后手动来装。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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