index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Dave Reisner <dreisner@archlinux.org> | 2012-04-19 12:55:20 -0400 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2012-04-24 09:54:06 -0400 |
commit | 1b494ab77198a6cbb9c06a13435159641e2dc0c5 (patch) | |
tree | 6daca2567d4705e4d7ce6b284b91a34b4f1ce376 /contrib/bacman.in | |
parent | 71fcb69028d6e02bc7f24459918e504d261f86cd (diff) |
-rwxr-xr-x | contrib/bacman.in | 308 |
diff --git a/contrib/bacman.in b/contrib/bacman.in deleted file mode 100755 index 93623565..00000000 --- a/contrib/bacman.in +++ /dev/null @@ -1,308 +0,0 @@ -#!/bin/bash -# -# bacman: recreate a package from a running system -# This script rebuilds an already installed package using metadata -# stored into the pacman database and system files -# -# (c) 2008 - locci <carlocci_at_gmail_dot_com> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -shopt -s extglob -shopt -s nullglob - -declare -r myname='bacman' -declare -r myver='@PACKAGE_VERSION@' - -# -# User Friendliness -# -usage() { - echo "This program recreates a package using pacman's db and system files" - echo "Usage: $myname <installed package name>" - echo "Example: $myname kernel26" -} - -version() { - printf "%s %s\n" "$myname" "$myver" - echo 'Copyright (C) 2008 locci <carlocci_at_gmail_dot_com>' -} - -if (( $# != 1 )); then - usage - exit 1 -fi - -if [[ $1 = -@(h|-help) ]]; then - usage - exit 0 -elif [[ $1 = -@(V|-version) ]]; then - version - exit 0 -fi - -# -# Fakeroot support -# -if (( EUID )); then - if [[ -f /usr/bin/fakeroot ]]; then - echo "Entering fakeroot environment" - export INFAKEROOT="1" - /usr/bin/fakeroot -u -- "$0" "$@" - exit $? - else - echo "WARNING: installing fakeroot or running $myname as root is required to" - echo " preserve the ownership permissions of files in some packages" - echo "" - fi -fi - -# -# Setting environmental variables -# -if [[ ! -r @sysconfdir@/pacman.conf ]]; then - echo "ERROR: unable to read @sysconfdir@/pacman.conf" - exit 1 -fi - -eval $(awk '/DBPath/ {print $1$2$3}' @sysconfdir@/pacman.conf) -pac_db="${DBPath:-@localstatedir@/lib/pacman/}/local" - -if [[ ! -r @sysconfdir@/makepkg.conf ]]; then - echo "ERROR: unable to read @sysconfdir@/makepkg.conf" - exit 1 -fi - -source "@sysconfdir@/makepkg.conf" -if [[ -r ~/.makepkg.conf ]]; then - source ~/.makepkg.conf -fi - -pkg_arch=${CARCH:-'unknown'} -pkg_dest="${PKGDEST:-$PWD}" -pkg_pkger=${PACKAGER:-'Unknown Packager'} - -pkg_name="$1" -pkg_dir=("$pac_db/$pkg_name"-+([^-])-+([^-])) -pkg_namver=("${pkg_dir[@]##*/}") - -# -# Checks everything is in place -# -if [[ ! -d $pac_db ]]; then - echo "ERROR: pacman database directory ${pac_db} not found" - exit 1 -fi - -if (( ${#pkg_dir[@]} != 1 )); then - printf "ERROR: %d entries for package %s found in pacman database\n" \ - ${#pkg_dir[@]} "${pkg_name}" - printf "%s\n" "${pkg_dir[@]}" - exit 1 -fi - -if [[ ! -d $pkg_dir ]]; then - printf "ERROR: package %s is found in pacman database,\n" "${pkg_name}" - printf " but \`%s' is not a directory\n" "${pkg_dir}" - exit 1 -fi - -# -# Begin -# -echo "Package: ${pkg_namver}" -work_dir=$(mktemp -d --tmpdir bacman.XXXXXXXXXX) -cd "$work_dir" || exit 1 - -# -# File copying -# -echo "Copying package files..." - -cat "$pkg_dir"/files | -while read i; do - if [[ -z $i ]]; then - continue - fi - - if [[ $i == %+([A-Z])% ]]; then - current=$i - continue - fi - - case "$current" in - %FILES%) - ret=0 - if [[ -e /$i ]]; then - bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf - - - # Workaround to bsdtar not reporting a missing file as an error - if ! [[ -e $work_dir/$i || -L $work_dir/$i ]]; then - echo "" - echo "ERROR: unable to add /$i to the package" - echo " If your user does not have permssion to read this file then" - echo " you will need to run $myname as root" - rm -rf "$work_dir" - exit 1 - fi - else - echo "" - echo "WARNING: package file /$i is missing" - echo "" - fi - ;; - esac -done - -ret=$? -if (( ret )); then - rm -rf "$work_dir" - exit 1 -fi - -pkg_size=$(du -sk | awk '{print $1 * 1024}') - -# -# .PKGINFO stuff -# TODO adopt makepkg's write_pkginfo() into this or scripts/library -# -echo Generating .PKGINFO metadata... -echo "# Generated by $myname $myver" > .PKGINFO -if [[ $INFAKEROOT == "1" ]]; then - echo "# Using $(fakeroot -v)" >> .PKGINFO -fi -echo "# $(LC_ALL=C date)" >> .PKGINFO -echo "#" >> .PKGINFO - -cat "$pkg_dir"/{desc,files} | -while read i; do - if [[ -z $i ]]; then - continue; - fi - - if [[ $i == %+([A-Z])% ]]; then - current=$i - continue - fi - - case "$current" in - # desc - %NAME%) - echo "pkgname = $i" >> .PKGINFO - ;; - %VERSION%) - echo "pkgver = $i" >> .PKGINFO - ;; - %DESC%) - echo "pkgdesc = $i" >> .PKGINFO - ;; - %URL%) - echo "url = $i" >> .PKGINFO - ;; - %LICENSE%) - echo "license = $i" >> .PKGINFO - ;; - %ARCH%) - echo "arch = $i" >> .PKGINFO - ;; - %BUILDDATE%) - echo "builddate = $(date -u "+%s")" >> .PKGINFO - ;; - %PACKAGER%) - echo "packager = $pkg_pkger" >> .PKGINFO - ;; - %SIZE%) - echo "size = $pkg_size" >> .PKGINFO - ;; - %GROUPS%) - echo "group = $i" >> .PKGINFO - ;; - %REPLACES%) - echo "replaces = $i" >> .PKGINFO - ;; - %DEPENDS%) - echo "depend = $i" >> .PKGINFO - ;; - %OPTDEPENDS%) - echo "optdepend = $i" >> .PKGINFO - ;; - %CONFLICTS%) - echo "conflict = $i" >> .PKGINFO - ;; - %PROVIDES%) - echo "provides = $i" >> .PKGINFO - ;; - - # files - %BACKUP%) - # strip the md5sum after the tab - echo "backup = ${i%%$'\t'*}" >> .PKGINFO - ;; - esac -done - -comp_files=".PKGINFO" - -if [[ -f $pkg_dir/install ]]; then - cp "$pkg_dir/install" "$work_dir/.INSTALL" - comp_files+=" .INSTALL" -fi -if [[ -f $pkg_dir/changelog ]]; then - cp "$pkg_dir/changelog" "$work_dir/.CHANGELOG" - comp_files+=" .CHANGELOG" -fi - -# -# Fixes owner:group and permissions for .PKGINFO, .CHANGELOG, .INSTALL -# -chown root:root "$work_dir"/{.PKGINFO,.CHANGELOG,.INSTALL} 2> /dev/null -chmod 644 "$work_dir"/{.PKGINFO,.CHANGELOG,.INSTALL} 2> /dev/null - -# -# Generate the package -# -echo "Generating the package..." - -pkg_file="$pkg_dest/$pkg_namver-$pkg_arch${PKGEXT}" -ret=0 - -# TODO: Maybe this can be set globally for robustness -shopt -s -o pipefail -bsdtar -cf - $comp_files * | -case "$PKGEXT" in - *tar.gz) gzip -c -f -n ;; - *tar.bz2) bzip2 -c -f ;; - *tar.xz) xz -c -z - ;; - *tar.Z) compress -c -f ;; - *tar) cat ;; - *) echo "WARNING: '%s' is not a valid archive extension." \ - "$PKGEXT" >&2; cat ;; -esac > "${pkg_file}"; ret=$? - -if (( ret )); then - echo "ERROR: unable to write package to $pkg_dest" - echo " Maybe the disk is full or you do not have write access" - rm -rf "$work_dir" - exit 1 -fi - -rm -rf "$work_dir" - -echo Done - -exit 0 - -# vim: set ts=2 sw=2 noet: - |