Meego Wiki
Views

Local Build Without OBS Needed/chinese

From MeeGo wiki
Jump to: navigation, search

这页主要是为了那些想尽量不与OBS后台连接的人-比如“尽量原始”

如果你只是想进行一次本地创建,那么你可能会使用“osc build",因为它基本可以为你做任何事。参照Build_Infrastructure/Packagers_Developers

Contents

使用build创建你的包

一种更简单的创建包的方法就是使用‘build’,它是OpenSUSE,MeeGo中创建时用到的的基础工具

你可以根据的linux系统从这得到它的二进制包:http://repo.meego.com/MeeGo/tools/repos/,如果你的系统不再那,你可以从这获取它的源码包 http://www.gitorious.org/opensuse/build ,然后手动创建。

安装上它过后(我相信你知道怎么在你的linux系统上安装一个包),你可以通过运行“build --help”查看帮助信息。

你必须以root权限来运行build。如果你的网络需要代理,请设置好代理环境变量,比如:

export http_proxy=http://proxy.yourcompany.com:8080/
export no_proxy=localhost,127.0.0.0/8,.yourcompany.com, 172.16.0.0/16

如果你运行的是“sudo build ...” 并且你的网络需要proxy,请确保 sudo 继承了代理环境变量,你可以通过将下面的数据键入/etc/sudoers来实现

Defaults    env_keep += "http_proxy no_proxy HTTP_PROXY NO_PROXY"

build 会核查rpm包的签名,所以你必须导入你要使用的仓库公钥,比如:

对于 http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/ia32/packages/

你可以由此获得它的公钥:

http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/ia32/packages/repodata/repomd.xml.key
$ wget http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/ia32/packages/repodata/repomd.xml.key
$ sudo rpm --import repomd.xml.key

这个命令将会创建一个cpio的Meego二进制包。

build --repository http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/ia32/packages/ --arch i686 cpio-2.11-2.6.src.rpm

你也可以选择使用spec文件去创建它,就这种情况而言,build将会在当前工作目录中找你的源码tar包和patche文件。

build --repository http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/ia32/packages/ --arch i686 cpio.spec

build将会依据你的repo地址去缓存你的repo,所以对于相同的仓库,请每次使用相同的地址(地址末尾加/和不加/将得到不同的缓存目录),你可以使用多个:

build --repository http://repo.meego.com/MeeGo/builds/trunk/preview/core/repos/ia32/packages/ \
    --repository http://repo.meego.com/MeeGo/builds/trunk/preview/netbook/repos/ia32/packages/ \
    --arch i686 meego-panel-applications-0.2.3-1.10.src.rpm

默认的缓存目录是/var/cache/build.你可以使用--cachedir选项来指定到其他目录。

默认的BUILDROOT目录是/var/tmp/build-root,你可以使用 --root选项指定一个或者更多的目录,一旦build完成了,你可以从BUILDROOT中获得你的二进制包,比如:

...
Wrote: /home/abuild/rpmbuild/SRPMS/cpio-2.11-2.meego.src.rpm
Wrote: /home/abuild/rpmbuild/RPMS/i586/cpio-2.11-2.meego.i586.rpm
Wrote: /home/abuild/rpmbuild/RPMS/i586/cpio-debuginfo-2.11-2.meego.i586.rpm
...

你的cpio二进制包是 /var/tmp/build-root/home/abuild/rpmbuild/RPMS/i586/2.11-2.meego.i586.rpm

疑难解答 (ARM)

Exec format error

碰到这个问题:

在fedora13上使用‘build’去创建 armv7l 的rpm包时 其中可能的原因:可能是'qemu-arm'设置不正确。可以试试运行命令‘file /use/bin/qemu-arm’,如果他的结果显示‘dynamically linked’,那可能问题就在这,它本应该是‘statically linked’。 可以使用命令 ' rpm -i http://download.opensuse.org/repositories/home:/dl9pf:/qemu/Fedora_12/i386/qemu-devel-0.13git2010.06.24.1826-8.1.i386.rpm' (这个包可能会有更新,所以可以登入这个网址去取它)重新安装这个部分,可能你会因为一些依赖关系遇到些问题,你可以先卸载他们

在ubuntu10.04,你应该现安装‘qemu-arm-static’,使用命令: apt-get install qemu-arm-static

rpm error

这个问题出现在ubuntu10.04当使用‘build’ 去创建i686rpm时.

Error:rpm: error while loading shared libraries: liblua-5.1.so: cannot open shared object file: No such file or directory 请修改 ‘’‘/usr/lib/build/configs/default.conf’‘’ 在preintall部分添加liblua --Kismeter 15:02, 2 December 2010 (UTC)

Nothing Provides

这个问题出现在Ubuntu10.04当使用‘build’去创建i586包时 请使用build --repository http://repo.meego.com/MeeGo/builds/xxx/core/repos/ia32/packages/ --arch i686 xxxx.src.rpm arch必须为i686

chroot: cannot run command `rpm'

当创建armv7lrpm包时,修改/usr/lib/build/build 和/usr/lib/build/configs/meego-1.0.conf ,将文件中的armv7el改成armv7l。可能/usr/lib/build/Build.pm也需要改。

Personal tools