#!/bin/bash # taken from the quickinst script. cd/net code merged together target_write_pacman_conf () { PKGFILE=/tmp/packages.txt echo "[core]" >/tmp/pacman.conf if [ "$var_PKG_SOURCE_TYPE" = "net" ] then wget $PKG_SOURCE/packages.txt -O /tmp/packages.txt || die_error " Could not fetch package list from server" echo "Server = $PKGARG" >>/tmp/pacman.conf fi if [ "$var_PKG_SOURCE_TYPE" = "cd" ] then [ -f $PKG_SOURCE/packages.txt ] || die_error "error: Could not find package list: $PKGFILE" cp $PKG_SOURCE/packages.txt /tmp/packages.txt echo "Server = file://$PKGARG" >>/tmp/pacman.conf fi mkdir -p $var_TARGET_DIR/var/cache/pacman/pkg /var/cache/pacman &>/dev/null rm -f /var/cache/pacman/pkg &>/dev/null [ "$var_PKG_SOURCE_TYPE" = "net" ] && ln -sf $var_TARGET_DIR/var/cache/pacman/pkg /var/cache/pacman/pkg &>/dev/null [ "$var_PKG_SOURCE_TYPE" = "cd" ] && ln -sf $PKGARG /var/cache/pacman/pkg &>/dev/null } # target_prepare_pacman() taken from setup. modified a bit # configures pacman and syncs for the first time on destination system # # $@ repositories to enable (optional. default: core) # returns: 1 on error target_prepare_pacman() { [ "$var_PKG_SOURCE_TYPE" = "cd" ] && local serverurl="${var_FILE_URL}" [ "$var_PKG_SOURCE_TYPE" = "net" ] && local serverurl="${var_SYNC_URL}" [ -z "$1" ] && repos="libre core" [ -n "$1" ] && repos="$@" # Setup a pacman.conf in /tmp cat << EOF > /tmp/pacman.conf [options] CacheDir = ${var_TARGET_DIR}/var/cache/pacman/pkg CacheDir = /src/core/pkg Architecture = auto EOF for repo in $repos do #TODO: this is a VERY, VERY dirty hack. we fall back to net for any non-core repo because we only have core on the CD. also user maybe didn't pick a mirror yet if [ "$repo" != core ] && [ "$repo" != libre ] then add_pacman_repo target ${repo} "Include = $var_MIRRORLIST" || return 1 else # replace literal '$repo' in the serverurl string by "$repo" where $repo is our variable. add_pacman_repo target ${repo} "Server = ${serverurl/\$repo/$repo}" || return 1 fi done # Set up the necessary directories for pacman use for dir in var/cache/pacman/pkg var/lib/pacman do if [ ! -d "${var_TARGET_DIR}/$dir" ] then mkdir -m 755 -p "${var_TARGET_DIR}/$dir" || return 1 fi done inform "Refreshing package database..." $PACMAN_TARGET -Sy >$LOG 2>&1 || return 1 return 0 } # $1 target/runtime list_pacman_repos () { [ "$1" != runtime -a "$1" != target ] && die_error "list_pacman_repos needs target/runtime argument" [ "$1" = target ] && conf=/tmp/pacman.conf [ "$1" = runtime ] && conf=/etc/pacman.conf grep '\[.*\]' $conf | grep -v options | grep -v '^#' | sed 's/\[//g' | sed 's/\]//g' } # $1 target/runtime # $2 repo name # $3 string add_pacman_repo () { [ "$1" != runtime -a "$1" != target ] && die_error "add_pacman_repo needs target/runtime argument" [ -z "$3" ] && die_error "target_add_repo needs \$2 repo-name and \$3 string (eg Server = ...)" [ "$1" = target ] && conf=/tmp/pacman.conf [ "$1" = runtime ] && conf=/etc/pacman.conf cat << EOF >> $conf [${2}] ${3} EOF } # not sorted list_package_groups () { echo -e "base\nbase-devel" } # List the packages in one or more repos or groups. output is one or more lines, each line being like this: # packagename [version, if $1=repo] # lines are sorted by packagename # $action repo or group # $@ one or more repo or group names list_packages () { action=$1; shift [ "$action" = repo -o "$action" = group ] || die_error "list_packages \$action must be repo or group. not $action!" [ "$action" = repo ] && $PACMAN_TARGET -Sql $@ [ "$action" = group ] && $PACMAN_TARGET -Sqg $@ } # find out the group to which one or more packages belong # arguments: packages # output format: multiple lines, each line like: # # order is the same as the input which_group () { PACKAGE_GROUPS=`LANG=C $PACMAN_TARGET -Si "$@" | awk '/^Name/{ printf("%s ",$3) } /^Group/{ print $3 }'` } # get group and packagedesc for packages # arguments: packages # output format: multiple lines, each line like: # # order is the same as the input # note that space is used as separator, but desc is the only thing that will contain spaces. pkginfo () { PACKAGE_INFO=`LANG=C $PACMAN_TARGET -Si "$@" | awk '/^Name/{ printf("%s ",$3) } /^Version/{ printf("%s ",$3) } /^Group/{ printf("%s", $3) } /^Description/{ for(i=3;i<=NF;++i) printf(" %s",$i); printf ("\n")}'` } target_configure_mirrorlist () { # add installer-selected mirror to the top of the mirrorlist, unless it's already at the top. previously added mirrors are kept (a bit lower), you never know.. if [ "$var_PKG_SOURCE_TYPE" = "net" -a -n "${var_SYNC_URL}" ]; then if ! grep "^Server =" -m 1 "${var_TARGET_DIR}/$var_MIRRORLIST" | grep "${var_SYNC_URL}" then debug 'PACMAN PROCEDURE' "Adding choosen mirror (${var_SYNC_URL}) to ${var_TARGET_DIR}/$var_MIRRORLIST" mirrorlist=`awk "BEGIN { printf(\"# Mirror used during installation\nServer = "${var_SYNC_URL}"\n\n\") } 1 " "${var_TARGET_DIR}/$var_MIRRORLIST"` || return $? echo "$mirrorlist" > "${var_TARGET_DIR}/$var_MIRRORLIST" || return $? fi fi return 0 }