mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
Add create_core_pkg.sh and start using it
This commit is contained in:
parent
6c0329cbea
commit
1217cd7a98
172
build/scripts/create_core_pkg.sh
Executable file
172
build/scripts/create_core_pkg.sh
Executable file
@ -0,0 +1,172 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# create_core_pkg.sh
|
||||
#
|
||||
# part of pfSense (https://www.pfsense.org)
|
||||
# Copyright (c) 2004-2016 Electric Sheep Fencing, LLC
|
||||
# All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
|
||||
|
||||
scripts_path=$(dirname $(realpath $0))
|
||||
|
||||
if [ ! -f "${scripts_path}/common.subr" ]; then
|
||||
echo >&2 "ERROR: common.subr is missing"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
. ${scripts_path}/common.subr
|
||||
|
||||
usage() {
|
||||
cat >&2 <<END
|
||||
Usage: $(basename $0) -t template -d destdir [-h]
|
||||
|
||||
Options:
|
||||
-t template -- Path to package template directory
|
||||
-f flavor -- package flavor
|
||||
-v version -- package version
|
||||
-r root -- root directory containing package files
|
||||
-F filter -- filter pattern to exclude files from plist
|
||||
-d destdir -- Destination directory to create package
|
||||
-h -- Show this help and exit
|
||||
|
||||
Environment:
|
||||
TMPDIR -- Temporary directory (default: /tmp)
|
||||
PRODUCT_NAME -- Product name (default: pfSense)
|
||||
PRODUCT_URL -- Product URL (default: https://www.pfsense.org)
|
||||
END
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts t:f:v:r:F:d:h opt; do
|
||||
case "$opt" in
|
||||
t)
|
||||
template=$OPTARG
|
||||
;;
|
||||
f)
|
||||
flavor=$OPTARG
|
||||
;;
|
||||
v)
|
||||
version=$OPTARG
|
||||
;;
|
||||
r)
|
||||
root=$OPTARG
|
||||
;;
|
||||
F)
|
||||
filter=$OPTARG
|
||||
;;
|
||||
d)
|
||||
destdir=$OPTARG
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ -z "$template" ] \
|
||||
&& err "template directory is not defined"
|
||||
|
||||
[ -e $template -a ! -d $template ] \
|
||||
&& err "template path is not a directory"
|
||||
|
||||
[ -z "$destdir" ] \
|
||||
&& err "destination directory is not defined"
|
||||
|
||||
[ -e $destdir -a ! -d $destdir ] \
|
||||
&& err "destination path already exists and is not a directory"
|
||||
|
||||
: ${TMPDIR=/tmp}
|
||||
: ${PRODUCT_NAME=pfSense}
|
||||
: ${PRODUCT_URL=http://www.pfsense.org/}
|
||||
|
||||
[ -d $destdir ] \
|
||||
|| mkdir -p ${destdir}
|
||||
|
||||
template_path=$(realpath $(dirname ${template}))
|
||||
template_name=$(basename ${template})
|
||||
template_metadir=${template_path}/metadir
|
||||
template_licensedir=${template_path}/_license
|
||||
|
||||
[ -d ${template_metadir} ] \
|
||||
|| err "template directory not found for package ${template_name}"
|
||||
|
||||
scratchdir=$(mktemp -d -q ${TMPDIR:-/tmp}/${template_name}.XXXXXXX)
|
||||
|
||||
[ -n "${scratchdir}" -a -d ${scratchdir} ] \
|
||||
|| err "error creating temporary directory"
|
||||
|
||||
trap "rm -rf ${scratchdir}" 1 2 15 EXIT
|
||||
|
||||
metadir=${scratchdir}/${template_name}_metadir
|
||||
|
||||
run "Copying metadata for package ${template_name}" \
|
||||
"cp -r ${template_metadir} ${metadir}"
|
||||
|
||||
manifest=${metadir}/+MANIFEST
|
||||
plist=${scratchdir}/${template_name}_plist
|
||||
exclude_plist=${scratchdir}/${template_name}_exclude_plist
|
||||
|
||||
if [ -f "${template_path}/pkg-plist" ]; then
|
||||
cp ${template_path}/pkg-plist ${plist}
|
||||
else
|
||||
if [ -n "${filter}" ]; then
|
||||
filter="-name ${filter}"
|
||||
fi
|
||||
(cd ${root} \
|
||||
&& find . ${filter} -type f -or -type l \
|
||||
| sed 's,^.,,' \
|
||||
| sort -u \
|
||||
) > ${plist}
|
||||
fi
|
||||
|
||||
if [ -f "${template_path}/exclude_plist" ]; then
|
||||
cp ${template_path}/exclude_plist ${exclude_plist}
|
||||
else
|
||||
touch ${exclude_plist}
|
||||
fi
|
||||
|
||||
sed \
|
||||
-i '' \
|
||||
-e "s,%%PRODUCT_NAME%%,${PRODUCT_NAME},g" \
|
||||
-e "s,%%PRODUCT_URL%%,${PRODUCT_URL},g" \
|
||||
-e "s,%%FLAVOR%%,${flavor:+-}${flavor},g" \
|
||||
-e "s,%%FLAVOR_DESC%%,${flavor:+ (${flavor})},g" \
|
||||
-e "s,%%VERSION%%,${version},g" \
|
||||
${metadir}/* \
|
||||
${plist} \
|
||||
${exclude_plist}
|
||||
|
||||
if [ -f "${exclude_plist}" ]; then
|
||||
sort -u ${exclude_plist} > ${plist}.exclude
|
||||
mv ${plist} ${plist}.tmp
|
||||
comm -23 ${plist}.tmp ${plist}.exclude > ${plist}
|
||||
rm -f ${plist}.tmp ${plist}.exclude
|
||||
fi
|
||||
|
||||
# Add license information
|
||||
if [ -d "${template_licensedir}" ]; then
|
||||
portname=$(sed '/^name: /!d; s,^[^"]*",,; s,",,' ${metadir}/+MANIFEST)
|
||||
licenses_dir="/usr/local/share/licenses/${portname}-${version}"
|
||||
|
||||
mkdir -p ${root}${licenses_dir}
|
||||
for f in ${template_licensedir}/*; do
|
||||
cp ${f} ${licenses_dir}
|
||||
echo "${licenses_dir}/$(basename ${f})" >> ${plist}
|
||||
done
|
||||
fi
|
||||
|
||||
run "Creating core package ${template_name}" \
|
||||
"pkg create -o ${destdir} -p ${plist} -r ${root} -m ${metadir}"
|
||||
@ -84,87 +84,16 @@ core_pkg_create() {
|
||||
local _root="${4}"
|
||||
local _filter="${5}"
|
||||
|
||||
[ -d "${CORE_PKG_TMP}" ] \
|
||||
&& rm -rf ${CORE_PKG_TMP}
|
||||
local _template_path=${BUILDER_TOOLS}/templates/core_pkg/${_template}
|
||||
|
||||
local _templates_path=${BUILDER_TOOLS}/templates/core_pkg/${_template}
|
||||
local _template_metadir=${_templates_path}/metadir
|
||||
local _metadir=${CORE_PKG_TMP}/${_template}_metadir
|
||||
|
||||
if [ ! -d ${_template_metadir} ]; then
|
||||
echo "ERROR: Template dir not found for pkg ${_template}"
|
||||
exit
|
||||
fi
|
||||
|
||||
mkdir -p ${CORE_PKG_TMP}
|
||||
|
||||
cp -r ${_template_metadir} ${_metadir}
|
||||
|
||||
local _manifest=${_metadir}/+MANIFEST
|
||||
local _plist=${CORE_PKG_TMP}/${_template}_plist
|
||||
local _exclude_plist=${CORE_PKG_TMP}/${_template}_exclude_plist
|
||||
|
||||
if [ -f "${_templates_path}/pkg-plist" ]; then
|
||||
cp ${_templates_path}/pkg-plist ${_plist}
|
||||
else
|
||||
if [ -n "${_filter}" ]; then
|
||||
_filter="-name ${_filter}"
|
||||
fi
|
||||
(cd ${_root} && find . ${_filter} -type f -or -type l | sed 's,^.,,' | sort -u) > ${_plist}
|
||||
fi
|
||||
|
||||
if [ -f "${_templates_path}/exclude_plist" ]; then
|
||||
cp ${_templates_path}/exclude_plist ${_exclude_plist}
|
||||
else
|
||||
touch ${_exclude_plist}
|
||||
fi
|
||||
|
||||
sed \
|
||||
-i '' \
|
||||
-e "s,%%PRODUCT_NAME%%,${PRODUCT_NAME},g" \
|
||||
-e "s,%%PRODUCT_URL%%,${PRODUCT_URL},g" \
|
||||
-e "s,%%FLAVOR%%,${_flavor:+-}${_flavor},g" \
|
||||
-e "s,%%FLAVOR_DESC%%,${_flavor:+ (${_flavor})},g" \
|
||||
-e "s,%%VERSION%%,${_version},g" \
|
||||
${_metadir}/* \
|
||||
${_plist} \
|
||||
${exclude_plist}
|
||||
|
||||
if [ -f "${_exclude_plist}" ]; then
|
||||
sort -u ${_exclude_plist} > ${_plist}.exclude
|
||||
mv ${_plist} ${_plist}.tmp
|
||||
comm -23 ${_plist}.tmp ${_plist}.exclude > ${_plist}
|
||||
rm -f ${_plist}.tmp ${plist}.exclude
|
||||
fi
|
||||
|
||||
# Add license information
|
||||
local _portname=$(sed '/^name: /!d; s,^[^"]*",,; s,",,' ${_metadir}/+MANIFEST)
|
||||
local _licenses_dir="/usr/local/share/licenses/${_portname}-${_version}"
|
||||
mkdir -p ${_root}${_licenses_dir}
|
||||
cp ${BUILDER_ROOT}/LICENSE ${_root}${_licenses_dir}/APACHE20
|
||||
echo "This package has a single license: APACHE20 (Apache License 2.0)." \
|
||||
> ${_root}${_licenses_dir}/LICENSE
|
||||
cat <<EOF >${_root}${_licenses_dir}/catalog.mk
|
||||
_LICENSE=APACHE20
|
||||
_LICENSE_NAME=Apache License 2.0
|
||||
_LICENSE_PERMS=dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
|
||||
_LICENSE_GROUPS=FSF OSI
|
||||
_LICENSE_DISTFILES=
|
||||
EOF
|
||||
cat <<EOF >>${_plist}
|
||||
${_licenses_dir}/catalog.mk
|
||||
${_licenses_dir}/LICENSE
|
||||
${_licenses_dir}/APACHE20
|
||||
EOF
|
||||
|
||||
mkdir -p ${CORE_PKG_REAL_PATH}/All
|
||||
if ! pkg create -o ${CORE_PKG_REAL_PATH}/All -p ${_plist} -r ${_root} -m ${_metadir}; then
|
||||
echo ">>> ERROR: Error building package ${_template} ${_flavor}"
|
||||
print_error_pfS
|
||||
fi
|
||||
|
||||
# Cleanup _licenses_dir
|
||||
rm -rf ${_root}${_licenses_dir}
|
||||
${SCRIPTS_DIR}/create_core_pkg.sh \
|
||||
-t "${_template_path}" \
|
||||
-f "${_flavor}" \
|
||||
-v "${_version}" \
|
||||
-r "${_root}" \
|
||||
-F "${_filter}" \
|
||||
-d "${CORE_PKG_REAL_PATH}/All" \
|
||||
|| print_error_pfS
|
||||
}
|
||||
|
||||
# This routine will output that something went wrong
|
||||
|
||||
Loading…
Reference in New Issue
Block a user