opkg-svn 的PKGBUILD和通过opkg在线安装制作rootfs的方法

从AUR上 下载, yaourt -G opkg-svn

修改 ./configure --prefix=/usr --with-opkglibdir=/var/lib 和版本号变为650


# Maintainer: Jonathan Liu <[email protected]>
pkgname=opkg-svn
pkgver=650
pkgrel=1
pkgdesc="Lightweight package management system"
arch=('i686' 'x86_64')
url="http://code.google.com/p/opkg/"
license=('GPL2')
depends=('curl' 'gpgme')
options=('!libtool')
md5sums=()
_svntrunk=http://opkg.googlecode.com/svn/trunk/
_svnmod=opkg
build() {
  cd "$srcdir"
  msg "Connecting to SVN server...."
  if [[ -d "$_svnmod/.svn" ]]; then
    (cd "$_svnmod" && svn up -r "$pkgver")
  else
    svn co "$_svntrunk" --config-dir ./ -r "$pkgver" "$_svnmod"
  fi
  msg "SVN checkout done or server timeout"
  msg "Starting build..."
  rm -rf "$srcdir/$_svnmod-build"
  cp -r "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
  cd "$srcdir/$_svnmod-build"
  #
  # BUILD HERE
  #
  sed -i -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADER/' configure.ac
  ./autogen.sh
  #./configure --prefix=/usr --with-opkglockfile=/var/lib/opkg/lock
  ./configure --prefix=/usr --with-opkglibdir=/var/lib
  make
}
package() {
  cd "$srcdir/$_svnmod-build"
  make DESTDIR="$pkgdir" install
  #install -d -m 775 "$pkgdir/usr/lib/opkg"
  install -d -m 775 "$pkgdir/var/lib/opkg"
}
# vim:set ts=2 sw=2 et:


=====================操作opkg-cl时重点是需要绝对路径===========================

#!/bin/bash
#sudo pseudo -P /usr groupadd --root $(pwd)/armv5te_rootfs -r abc
ROOTFS_DIR=$(pwd)/armv5te_rootfs
LOG_FILE="/tmp/do_opkg.log"
export INSTALL_CONF_IPK="${ROOTFS_DIR}/etc/opkg.conf"
export INSTALL_ROOTFS_IPK="${ROOTFS_DIR}"
BUILD_TEMP="$(pwd)/build_tmp"
CACHE_DIR="${BUILD_TEMP}/cache_ipks"
TEMP_DIR="${BUILD_TEMP}/temp"
export OFFLINE_ROOT=$ROOTFS_DIR
export IPKG_OFFLINE_ROOT=$ROOTFS_DIR
export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT}
export D=${ROOTFS_DIR}
REMOVE_ARGS="--force-depends"
if [ ! -d ${TEMP_DIR} ] ; then
    mkdir -pv ${TEMP_DIR}
fi
if [ ! -d $CACHE_DIR ] ; then
    mkdir -pv $CACHE_DIR
fi
if [ ! -d $ROOTFS_DIR ] ; then
    mkdir -pv $ROOTFS_DIR
fi
if [ ! -d ${ROOTFS_DIR}/var/lib/opkg ] ; then
    mkdir -p ${ROOTFS_DIR}/var/lib/opkg
fi
if [ ! -e ${ROOTFS_DIR}/var/lib/opkg/status ] ; then
    touch ${ROOTFS_DIR}/var/lib/opkg/status
fi
if [ ! -d ${ROOTFS_DIR}/etc/opkg ] ; then
    mkdir -pv ${ROOTFS_DIR}/etc/opkg
fi
if [ ! -e ${ROOTFS_DIR}/etc/opkg.conf ] ; then
    echo "arch all 1
arch any 6
arch noarch 11
arch arm 16
arch armv4 21
arch armv5 26
arch armv5-vfp 31
arch armv5te 36
arch armv5e-vfp 41
arch armv6 46
arch armv6-vfp 51
arch armv7a 56
arch armv7a-vfp 61
arch armv7a-vfp-neon 66
arch am335x_evm 71
arch ru2416 77
arch qemuarm 86
src/gz python http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/python
src/gz base http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/base
src/gz debug http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/debug
src/gz locales http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/locales
src/gz qemuarm http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/machine/qemuarm
src/gz oe-all http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/all
" > ${ROOTFS_DIR}/etc/opkg.conf
    #cp opkg.conf ${ROOTFS_DIR}/etc/opkg.conf
fi
opkg-cl -t ${TEMP_DIR} --cache ${CACHE_DIR} -f $INSTALL_CONF_IPK -o $INSTALL_ROOTFS_IPK --force_postinstall --prefer-arch-to-version $@ 2>&1 | tee -a  $LOG_FILE
#opkg-cl -f $INSTALL_CONF_IPK -o $INSTALL_ROOTFS_IPK --force_postinstall --prefer-arch-to-version --force-depends remove update-rc.d base-passwd  || true
#opkg-cl -f $INSTALL_CONF_IPK -o $INSTALL_ROOTFS_IPK --force_postinstall --prefer-arch-to-version status | opkg-query-helper.py -a
#opkg-cl -f $INSTALL_CONF_IPK -o $INSTALL_ROOTFS_IPK --force_postinstall --prefer-arch-to-version list_installed | awk '{ print $1 }'



# opkg-query-helper.py 位于 openembedded-core/scripts目录下

不指定 --conf (或 -f) 则默认查找 ${D}/etc/opkg/目录下的配置

export D=${ROOTFS_DIR} 非常重要,因为pkg_postinstall文件会判断 $D 来确定是否为在交叉方式安装包

OFFLINE_ROOT 变量在opkg源代码里会操作使用, OPKG_OFFLINE_ROOT变量则由 /usr/bin/update-alternatives 判断是否为外部rootfs操作

--offline-root <dir> offline installation of packages. 使用--offline-root离线安装模式



cat angstrom_rootfs/etc/opkg/angstrom-base.conf

src/gz angstrom-base http://us.feeds.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv7a/base


mkdir rootfs/etc/opkg -pv

mkdir rootfs/var/lib/opkg -pv

注意要将arch.conf拷到rootfs/etc/opkg 目录下


================================================

rootfs/etc/opkg.conf内容 适用于单个文件,架构 + 下载境像地址


arch all 1
arch any 6
arch noarch 11
arch arm 16
arch armv4 21
arch armv5 26
arch armv5-vfp 31
arch armv5te 36
arch armv5e-vfp 41
arch armv6 46
arch armv6-vfp 51
arch armv7a 56
arch armv7a-vfp 61
arch armv7a-vfp-neon 66
arch am335x_evm 71
arch ru2416 77
arch qemuarm 86
src/gz python http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/python
src/gz base http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/base
src/gz debug http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/debug
src/gz locales http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/locales
src/gz qemuarm http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/armv5te/machine/qemuarm
src/gz oe-all http://feeds.angstrom-distribution.org/feeds/v2012.12/ipk/eglibc/all


rootfs/etc/opkg/arch.conf 内容 代表允许安装的架构


arch all 1
arch any 6
arch noarch 11
arch arm 16
arch armv4 21
arch armv5 26
arch armv5-vfp 31
arch armv5e 36
arch armv5e-vfp 41
arch armv6 46
arch armv6-vfp 51
arch armv7a 56
arch armv7a-vfp 61
arch armv7a-vfp-neon 66
arch am335x_evm 71


cat build_index.sh 用于将目录下的 ipk目录制做Packages等文件

#!/bin/bash
pkgdir=$(pwd)/am335x
touch $pkgdir/Packages
flock $pkgdir/Packages.flock -c "opkg-make-index -r $pkgdir/Packages -p $pkgdir/Packages -m $pkgdir/"


你可能感兴趣的:(PKGBUILD,#archlinux,#oe)