source ../config/urls
source ../functions/gztobz2
-LFS_PKG_BASE="$(dirname $(pwd))/packages"
-LFS_PKG_DIR="${LFS_PKG_BASE}/${LFS_STAGE}"
-LFS_PATCHES_DIR="${LFS_PKG_BASE}/${LFS_STAGE}/patches"
-LFS_LOG_DIR="${LFS}/var/log/hvlinux-install/${LFS_STAGE}"
-LFS_LOG_FILE="${LFS_LOG_DIR}/pkg-update.log"
-WGET_LOG_FILE="${LFS_LOG_DIR}/pkg-wget.log"
-
-WGETCMD="wget --directory-prefix=${LFS_PKG_DIR} --timeout=15 --tries=3 -nc --continue --no-check-certificate --no-verbose --output-file=${WGET_LOG_FILE}"
-
-LFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-lfs.html
-BLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-blfs.html
-CLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-clfs.html
-HV_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-hv.html
-LFS_OLD_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-lfs-old.html
+# Ownership of downloaded files
+FPKG_USER="root"
+FPKG_GROUP="users"
# Test if the given file extension correspond to a compressed archive
# Arg. #1: File extension
local URL=${1}
local SOURCE=${2}
local DESTDIR=${LFS_PKG_DIR}
+ local wget_status
if [ ${#} -eq 3 ]; then
DESTDIR=${3}
--output-document=${DESTDIR}/${SOURCE}.part
wget_status=$?
+ chown ${FPKG_USER}:${FPKG_GROUP} ${DESTDIR}/${SOURCE}.part
+ chmod 664 ${DESTDIR}/${SOURCE}.part
+
# Append log to global log file
cat ${WGET_LOG_FILE} >> ${LFS_LOG_FILE}
# Rename temporary file to final name
mv ${DESTDIR}/${SOURCE}{.part,}
+ chown ${FPKG_USER}:${FPKG_GROUP} ${DESTDIR}/${SOURCE}
+ chmod 664 ${DESTDIR}/${SOURCE}
return 0
}
# Arg. #2: Destination filename.
static_fetch_patches_list()
{
+ local wget_status
+
PATCHES_URL=${1}
PATCHES_LIST_FILENAME=${2}
- # Appending a slash (/) will download the directory content as a file named index.html
- ${WGETCMD} "${PATCHES_URL}/" &&
+ # Appending a slash (/) will download the directory content as a file named
+ # index.html
+ ${WGETCMD} "${PATCHES_URL}/"
+ wget_status=$?
# Append log to global log file
- cat ${WGET_LOG_FILE} >> ${LFS_LOG_FILE} &&
+ cat ${WGET_LOG_FILE} >> ${LFS_LOG_FILE}
- mv ${LFS_PKG_DIR}/index.html ${PATCHES_LIST_FILENAME}
+ if [ ${wget_status} -eq 0 ]; then
+ mv ${LFS_PKG_DIR}/index.html ${PATCHES_LIST_FILENAME}
+ else
+ return 1
+ fi
}
# Arg. #1: If "test" is specified, set TEST_INTEGRITY to 1
# downloading other packages
export RCMD_NO_EXIT=1
- test_presence_of_packages_directory
+ init_log_file_update
- # First create log directory if it does not exists.
- if [ ! -d ${LFS_LOG_DIR} ]; then
- install -m755 -d ${LFS_LOG_DIR} || exit 1
- fi
+ export LFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-lfs.html
+ export BLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-blfs.html
+ export CLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-clfs.html
+ export WGET_LOG_FILE="${LFS_LOG_DIR}/pkg-wget.log"
+ export WGETCMD="wget --directory-prefix=${LFS_PKG_DIR} --timeout=15 --tries=3 -nc --continue --no-check-certificate --no-verbose --output-file=${WGET_LOG_FILE}"
# Then create destination directory if it does not exists.
if [ ! -d ${LFS_PKG_DIR} ]; then
- install -v -m755 -d ${LFS_PKG_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
+ install -v -m775 -o ${FPKG_USER} -g ${FPKG_GROUP} \
+ -d ${LFS_PKG_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
fi
# Create patches destination directory if it does not exists.
if [ ! -d ${LFS_PATCHES_DIR} ]; then
- install -v -m755 -d ${LFS_PATCHES_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
+ install -v -m775 -o ${FPKG_USER} -g ${FPKG_GROUP} \
+ -d ${LFS_PATCHES_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
fi
if [ -n "${TEST_INTEGRITY}" ]; then
return 1
fi
- if [ -n "${USE_LFS_PATCHES}" ]; then
- # Getting list of all patches from LFS server.
- rcmd "Fetching LFS patches list" static_fetch_patches_list ${LFS_PATCHES_URL} ${LFS_PATCHES_LIST}
- fi
+ # Temporary deactivate error checking.
+ set +e
- if [ -n "${USE_LFS_OLD_PATCHES}" ]; then
- # Getting list of all LFS old patches from hugovil.com server.
- rcmd "Fetching LFS old patches list" static_fetch_patches_list \
- ${LFS_OLD_PATCHES_URL} ${LFS_OLD_PATCHES_LIST}
- fi
+ # Getting list of all patches from LFS server.
+ rcmd "Fetching LFS patches list" static_fetch_patches_list \
+ ${LFS_PATCHES_URL} ${LFS_PATCHES_LIST}
- if [ -n "${USE_BLFS_PATCHES}" ]; then
- # Getting list of all patches from BLFS server.
- rcmd "Fetching BLFS patches list" static_fetch_patches_list ${BLFS_PATCHES_URL} ${BLFS_PATCHES_LIST}
- fi
+ # Getting list of all patches from BLFS server.
+ rcmd "Fetching BLFS patches list" static_fetch_patches_list \
+ ${BLFS_PATCHES_URL} ${BLFS_PATCHES_LIST}
- if [ -n "${USE_CLFS_PATCHES}" ]; then
- # Getting list of all patches from CLFS server.
- rcmd "Fetching CLFS patches list" static_fetch_patches_list ${CLFS_PATCHES_URL} ${CLFS_PATCHES_LIST}
- fi
+ # Getting list of all patches from CLFS server.
+ rcmd "Fetching CLFS patches list" static_fetch_patches_list \
+ ${CLFS_PATCHES_URL} ${CLFS_PATCHES_LIST}
- if [ -n "${USE_HV_PATCHES}" ]; then
- # Getting list of all patches from hugovil.com server.
- rcmd "Fetching hugovil.com patches list" static_fetch_patches_list ${HV_PATCHES_URL} ${HV_PATCHES_LIST}
- fi
+ # Reactivate error checking.
+ set -e
}
# Get patch for package if it is not in the repository
local PATCHES_LIST=${2}
local PATCHES_URL=${3}
+ # Make sure patch list file exists
+ if [ ! -f ${PATCHES_LIST} ]; then
+ return
+ fi
+
# Remplace les "+" par "%2B"
local PACK_URL=$(echo $PACK | sed s!\+!%2B!g)
return 1
fi
- if [ -n "${USE_LFS_PATCHES}" ]; then
- # Checking if patch is available from LFS.
- static_checkpatch ${PACK} ${LFS_PATCHES_LIST} ${LFS_PATCHES_URL}
- fi
+ # Checking if patch is available from LFS.
+ static_checkpatch ${PACK} ${LFS_PATCHES_LIST} ${LFS_PATCHES_URL}
- if [ -n "${USE_LFS_OLD_PATCHES}" ]; then
- # Checking if patch is available from LFS old.
- static_checkpatch ${PACK} ${LFS_OLD_PATCHES_LIST} ${LFS_OLD_PATCHES_URL}
- fi
+ # Checking if patch is available from BLFS.
+ static_checkpatch ${PACK} ${BLFS_PATCHES_LIST} ${BLFS_PATCHES_URL}
- if [ -n "${USE_BLFS_PATCHES}" ]; then
- # Checking if patch is available from BLFS.
- static_checkpatch ${PACK} ${BLFS_PATCHES_LIST} ${BLFS_PATCHES_URL}
- fi
-
- if [ -n "${USE_CLFS_PATCHES}" ]; then
- # Checking if patch is available from CLFS.
- static_checkpatch ${PACK} ${CLFS_PATCHES_LIST} ${CLFS_PATCHES_URL}
- fi
-
- if [ -n "${USE_HV_PATCHES}" ]; then
- # Checking if patch is available from hugovil.com.
- static_checkpatch ${PACK} ${HV_PATCHES_LIST} ${HV_PATCHES_URL}
- fi
+ # Checking if patch is available from CLFS.
+ static_checkpatch ${PACK} ${CLFS_PATCHES_LIST} ${CLFS_PATCHES_URL}
}
detect_file_not_found()
PREFERRED_EXT="${DEFAULT_ARCH_EXT_LIST}"
fi
- for arch_ext in ${PREFERRED_EXT}; do
- wget_wrapper ${URL} ${PACK}.${arch_ext}
- wget_wrapper_status=$?
+ wget_wrapper_status=
+ url_list="${URL}"
- if [ ${wget_wrapper_status} -eq 1 ]; then
- return 1;
- fi
+ if [ x"${URL}" != x"${HV_PACKAGES_URL}" ]; then
+ url_list+=" ${HV_PACKAGES_URL}"
+ fi
- if [ ${wget_wrapper_status} -eq 2 ]; then
- continue;
- fi
+ for url in ${url_list}; do
+ for arch_ext in ${PREFERRED_EXT}; do
+ wget_wrapper ${url} ${PACK}.${arch_ext}
+ wget_wrapper_status=$?
- # If we are here, it means the file was successfully downloaded.
- FINAL_EXT=${arch_ext}
+ #if [ ${wget_wrapper_status} -eq 1 ]; then
+ # return 1;
+ #fi
- # Convert to bzip2 format if requested and if it is a tar/gz archive
- if [ -n "${PREFER_BZIP2_ARCHIVE}" ]; then
- if is_extension_tar_gzip "${arch_ext}" ; then
- rcmd "Converting ${PACK}.${arch_ext} to bzip2 format" \
- gztobz2 ${LFS_PKG_DIR}/${PACK}.${arch_ext}
- FINAL_EXT="tar.bz2"
+ if [ ${wget_wrapper_status} -eq 0 ]; then
+ break;
fi
- fi
+ done
- return $?
+ if [ ${wget_wrapper_status} -eq 0 ]; then
+ break;
+ fi
done
# Failure or file not found
- return 1
+ if [ ${wget_wrapper_status} -gt 0 ]; then
+ return 1;
+ fi
+
+ # If we are here, it means the file was successfully downloaded.
+ FINAL_EXT=${arch_ext}
+
+ # Convert to bzip2 format if requested and if it is a tar/gz archive
+ if [ -n "${PREFER_BZIP2_ARCHIVE}" ]; then
+ if is_extension_tar_gzip "${arch_ext}" ; then
+ rcmd "Converting ${PACK}.${arch_ext} to bzip2 format" \
+ gztobz2 ${LFS_PKG_DIR}/${PACK}.${arch_ext}
+ FINAL_EXT="tar.bz2"
+ fi
+ fi
+
+ return 0
}
# Test integrity of archive
# pm (Perl module via CPAN)
# fd (freedesktop.org)
# -o Option specific to mode
-# -s Subdirectory on server
+# -s DIR Subdirectory on server
+# -v NUM Subdirectory on server is equal to package version. If -s option is specified, then
+# append version number to value of -s argument:
+# NUM= Full version number
+# NUM=1 First number of package version
+# NUM=2 First two numbers of package version
+# Ex: fpkg -s "v" -v 2 mypkg-1.2.3 http://mypkg.com would fetch from url:
+# http://mypkg.com/v1.2/mypkg-1.2.3.tar.bz2
# -w First erase destination file if it exists (except in test mode)
fpkg()
{
local MODE_OPT=""
local SRC_DIR=""
local FD_SUBDIR_FINAL=""
+ local VARG=""
+ unset VOPTION
unset ERASE_FIRST
- while getopts "d:e:f:m:o:s:w" flag ;do
+ while getopts "d:e:f:m:o:s:v:w" flag ;do
case ${flag} in
d)
# Fetch directory (where to put file)
s)
SRC_DIR=${OPTARG}
;;
+ v)
+ VOPTION="y"
+ VARG=${OPTARG}
+ ;;
w)
ERASE_FIRST="y"
;;
local URL=${2}
fi
+ if [ -n "${VOPTION}" ]; then
+ # Append version number to SRC_DIR (if specified)
+ case ${VARG} in
+ 0)
+ # Full version number
+ SRC_DIR+="$(get_pkg_ver ${PACK})"
+ ;;
+ 1)
+ SRC_DIR+="$(get_pkg_ver1 ${PACK})"
+ ;;
+ 2)
+ SRC_DIR+="$(get_pkg_ver2 ${PACK})"
+ ;;
+ 3)
+ SRC_DIR+="$(get_pkg_ver3 ${PACK})"
+ ;;
+ *)
+ echo "${FUNCNAME}(), invalid -v argument: ${VARG}"
+ return 1
+ ;;
+ esac
+ fi
+
if [ -n "${MODE}" ]; then
case ${MODE} in
gnu)
echo "${FUNCNAME}(), mode 'xorg' needs '-s' option"
return 1
fi
- if [ -z "${DEST_DIR}" ]; then
- # Default fetch (write to) directory
- DEST_DIR=${LFS_PKG_DIR}/${SRC_DIR}
- fi
;;
fd)
# Most common layout:
rm ${DEST_FILE}
fi
- if [ ! -f ${DEST_FILE} ]; then
+ if [ ! -f ${DEST_FILE} ]; then
# Fetch package
set +e
static_getpkg ${SRC_FILENAME} ${URL} ${FILE_EXT}
+ rc=$?
+
+ if [ ${rc} -ne 0 ]; then
+ return ${rc};
+ fi
set -e
# Move file if source filename is not equal to package name and/or