2024-05-03 19:56:11 +00:00
|
|
|
#!/bin/bash
|
|
|
|
# helps build a quick sbc image. that way a user doesn't have to use emapandas
|
|
|
|
# nor some other method. mock is probably not necessary, but it's up to you.
|
|
|
|
# label@resf.org
|
|
|
|
|
|
|
|
set -o errexit
|
|
|
|
set -o pipefail
|
|
|
|
|
|
|
|
SCRNAME="$(basename "$0")"
|
|
|
|
SCRDIR="$(dirname "${BASH_SOURCE[0]}")"
|
|
|
|
|
|
|
|
export __usage
|
|
|
|
__usage="
|
|
|
|
usage: $SCRNAME [OPTIONS]
|
|
|
|
|
|
|
|
Options:
|
|
|
|
-o, --output-dir DIR
|
|
|
|
-c, --sbc-image NAME
|
|
|
|
-p, --peridot ID # optional. will use peridot repos.
|
|
|
|
-d, --debug # optional
|
|
|
|
|
|
|
|
"
|
|
|
|
|
|
|
|
OPTS=$(getopt -a -n sbc-build -o c:,o:,p:,d,h \
|
|
|
|
-l sbc-image:,output-dir:,peridot:,debug,help -- "$@")
|
|
|
|
|
|
|
|
function is_in_path() {
|
|
|
|
builtin type -P "${1}"
|
|
|
|
}
|
|
|
|
|
|
|
|
function usage() {
|
|
|
|
echo "$__usage"
|
|
|
|
}
|
|
|
|
|
|
|
|
eval set -- "$OPTS"
|
|
|
|
while :; do
|
|
|
|
case "$1" in
|
|
|
|
-c | --sbc-image) SBC="$2" ; shift 2 ;;
|
|
|
|
-o | --output-dir) OUTPUTDIR="$2" ; shift 2 ;;
|
|
|
|
-p | --peridot) PERIDOTID="$2" ; shift 2 ;;
|
|
|
|
-d | --debug) DEBUG="--debug" ; shift ;;
|
|
|
|
-h | --help) usage ;;
|
|
|
|
--) shift ; break ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -z "$SBC" ] || [ -z "$OUTPUTDIR" ]; then
|
|
|
|
echo "Options are not set properly."
|
|
|
|
usage
|
|
|
|
exit 12
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -e "/sys/fs/selinux/enforce" ]; then
|
|
|
|
enforce_check="$(cat /sys/fs/selinux/enforce)"
|
|
|
|
if [ "$enforce_check" -eq "1" ]; then
|
|
|
|
echo "Running with selinux enforcing is not recommended."
|
|
|
|
exit 22
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
is_in_path kiwi-ng &> /dev/null
|
|
|
|
ret_val=$?
|
|
|
|
|
|
|
|
if [ "$ret_val" -ne "0" ]; then
|
|
|
|
echo "kiwi-ng not found. kiwi packages are likely not installed on this system."
|
|
|
|
exit 32
|
|
|
|
fi
|
|
|
|
|
|
|
|
function switch_repo_to_peridot() {
|
|
|
|
ID="$1"
|
|
|
|
# https://yumrepofs.build.resf.org/v1/projects/${ID}/repo/
|
|
|
|
pushd repositories || { echo "not found"; exit 1; }
|
|
|
|
sed -i "s;ZZ_INTERNAL_BaseOS_REPO_URL_ZZ;https://yumrepofs.build.resf.org/v1/projects/${ID}/repo/BaseOS/\$basearch;g" core-peridot.xml
|
|
|
|
sed -i "s;ZZ_INTERNAL_AppStream_REPO_URL_ZZ;https://yumrepofs.build.resf.org/v1/projects/${ID}/repo/AppStream/\$basearch;g" core-peridot.xml
|
|
|
|
sed -i "s;ZZ_INTERNAL_CRB_REPO_URL_ZZ;https://yumrepofs.build.resf.org/v1/projects/${ID}/repo/CRB/\$basearch;g" core-peridot.xml
|
|
|
|
sed -i "s;ZZ_INTERNAL_extras_REPO_URL_ZZ;https://yumrepofs.build.resf.org/v1/projects/${ID}/repo/extras/\$basearch;g" core-peridot.xml
|
|
|
|
rm core.xml
|
|
|
|
ln -sf core-peridot.xml core.xml
|
|
|
|
popd
|
|
|
|
}
|
|
|
|
|
|
|
|
function main() {
|
2024-10-28 02:37:33 +00:00
|
|
|
if [[ -e config.xml ]]; then
|
|
|
|
/bin/rm config.xml
|
|
|
|
fi
|
2024-05-03 19:56:11 +00:00
|
|
|
if [ ! -f "configs/rocky-sbc-${SBC,,}.xml" ]; then
|
|
|
|
echo "${LIVE} was not found. Is it supported?"
|
|
|
|
exit 42
|
|
|
|
fi
|
2024-10-28 02:37:33 +00:00
|
|
|
#ln -sf "configs/rocky-sbc-${SBC,,}.xml" config.xml
|
2024-05-03 19:56:11 +00:00
|
|
|
|
|
|
|
if [ -n "$PERIDOTID" ]; then
|
|
|
|
switch_repo_to_peridot "${PERIDOTID}"
|
|
|
|
fi
|
2024-10-28 02:37:33 +00:00
|
|
|
if [[ $SBC == "GenericArm-GPT" ]]; then
|
|
|
|
ln -s configs/rocky-sbc-genericarm-gpt.xml config.xml
|
|
|
|
elif [[ $SBC == "GenericArm-MBR" ]]; then
|
|
|
|
ln -s configs/rocky-sbc-genericarm-mbr.xml config.xml
|
|
|
|
else
|
|
|
|
ln -s configs/rocky-sbc-raspberrypi.xml config.xml
|
|
|
|
fi
|
2024-05-03 19:56:11 +00:00
|
|
|
# shellcheck disable=SC2086
|
2024-10-28 02:37:33 +00:00
|
|
|
kiwi-ng $DEBUG --type="oem" --profile="SBC-$SBC" --color-output system build --description="$SCRDIR" --target-dir "$OUTPUTDIR"
|
2024-05-03 19:56:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
main
|