Compare commits

..

10 Commits

8 changed files with 135 additions and 28 deletions

View File

@ -1,5 +1,5 @@
SUBDIRS := $(wildcard */.)
VERSION = 24.06
VERSION = 24.09
install:
@for dir in $(SUBDIRS) ; do \

View File

@ -80,6 +80,7 @@ if ! type "grub-mkrescue" > /dev/null; then
set_indent
warn "If you want to create UEFI ISO files make sure you install x64 GRUB or grub-efi"
warn "If you want to create BIOS ISO files make sure you install x86 GRUB or grub-bios"
warn "After installing GRUB, don't forget to install libisoburn as well"
exit 1
fi
@ -199,7 +200,7 @@ rm "${tmpdir}/stager.sh"
info "Cleaning up and building initrd"
rm "${isoh}"
pushd "$TMPDIR" > /dev/null
pushd "${tmpdir}" > /dev/null
mkdir -p "${rootdir}/boot"
find . | cpio --quiet -H newc -o | xz -T0 --check=crc32 > "${rootdir}/boot/initrd.img"
check_ret "Failed to build initrd"

View File

@ -42,7 +42,11 @@ get_fn_url() {
get_file() {
if [[ "${1}" == "https://"* || "${1}" == "http://"* || "${1}" == "ftp://"* ]]
then
curl "${1}" --progress-bar -OL
if [ $OPT_INSECURE -eq 1 ]; then
curl "${1}" --insecure --progress-bar -OL
else
curl "${1}" --progress-bar -OL
fi
return $?
elif [ -f "${pkgpath}/${1}" ]; then
cp "${pkgpath}/${1}" .
@ -89,6 +93,7 @@ help_cmd() {
echo_color " $BOLD--no-depend$RESET: don't check depends"
echo_color " $BOLD--no-stdout$RESET: disable stdout for PACKAGE() function"
echo_color " $BOLD--no-cache$RESET: don't check cache"
echo_color " $BOLD--insecure$RESET: allow insecure curl downloads"
echo_color " $BOLD--no-opts$RESET: don't show/list options"
echo_color " $BOLD--cores$RESET: how many cores to use for the build"
echo_color " $BOLD--out$RESET: directory for the output archive"
@ -105,7 +110,7 @@ clean_dist() {
rm -f "${distpath}/files.tar.gz"
}
# install a list of packages with matt
# install a list of packages with matt
matt_install(){
if [ "$EUID" -ne 0 ]; then
if type doas > /dev/null; then
@ -117,7 +122,7 @@ matt_install(){
return 1
fi
fi
$DOAS matt install --yes --skip --ignore-none $@
return $?
}
@ -154,6 +159,7 @@ check_depends() {
OPT_NO_DEPEND=0 # checking depends is ENABLED
OPT_NO_STDOUT=0 # PACKAGE() function output is ENABLED
OPT_NO_CACHE=0 # cache is ENABLED
OPT_INSECURE=0 # insecure curl downloads are DISABLED
OPT_NO_OPTS=0 # showing/listing options is ENABLED
OPT_CORES=$(nproc) # use ALL CPU cores
OPT_OUT="DEFAULT" # use the package dist directory for output
@ -171,6 +177,8 @@ for arg in "$@"; do
OPT_NO_STDOUT=1 ;;
"--no-cache")
OPT_NO_CACHE=1 ;;
"--insecure")
OPT_INSECURE=1 ;;
"--no-opts")
OPT_NO_OPTS=1 ;;
"--cores"*)
@ -223,6 +231,7 @@ if [ $OPT_NO_OPTS -eq 0 ]; then
print " $BOLD NO_DEPEND = $(itoyn $OPT_NO_DEPEND)"
print " $BOLD NO_SDTOUT = $(itoyn $OPT_NO_STDOUT)"
print " $BOLD NO_CACHE = $(itoyn $OPT_NO_CACHE)"
print " $BOLD INSECURE = $(itoyn $OPT_INSECURE)"
print " $BOLD NO_OPTS = $(itoyn $OPT_NO_OPTS)"
print " $BOLD CORES = ${OPT_CORES}"
print " $BOLD OUT = ${OPT_OUT}"
@ -368,6 +377,8 @@ info "Running the build function"
export CC="gcc"
export CXX="g++"
export CFLAGS="-march=x86-64 -mtune=generic -O2"
export CPPFLAGS="-march=x86-64 -mtune=generic -O2"
export CXXFLAGS="-march=x86-64 -mtune=generic -O2"
export ROOTDIR="${rootpath}"
export MAKEFLAGS="-j${OPT_CORES}"
export MAKEOPTS="-j${OPT_CORES}"
@ -387,6 +398,7 @@ fi
unset XORG_CONFIG XORG_PREFIX
unset MAKEOPTS MAKEFLAGS CXX
unset CPPFLAGS CXXFLAGS
unset CFLAGS ROOTDIR CC
if [ "$SECONDS" != "0" ]; then
@ -409,6 +421,11 @@ mkdir -p "${distpath}"
clean_dist
# build the files archive
if [ -z "$(ls -A)" ]; then
error "Root directory is empty, did something went wrong during build?"
exit 1
fi
find . -printf "%P\n" | fakeroot tar -czf "${distpath}/files.tar.gz" --no-recursion -T -
check_ret "(1/6) Failed to create the files archive (files.tar.gz)"
success "(1/6) Created the files archive (files.tar.gz)"
@ -438,7 +455,7 @@ success "(3/6) Created the changes file (CHANGES)"
# create the install script
if type INSTALL &>/dev/null; then
echo "$(type INSTALL | head -n-1 | tail -n-2 | sed 's/ //')" > "${distpath}/INSTALL"
echo "$(type INSTALL | head -n-1 | sed '1,3d' | sed 's/ //')" > "${distpath}/INSTALL"
check_ret "(4/6) Failed to create the install script (INSTALL)"
fi
success "(4/6) Created the install script (INSTALL)"

View File

@ -1,7 +1,7 @@
PREFIX = /usr
install:
install -Dm755 "mp-check.sh" $(DESTDIR)/$(PREFIX)/bin/mp-check
install -Dm755 "main.sh" $(DESTDIR)/$(PREFIX)/bin/mp-check
uninstall:
rm $(DESTDIR)/$(PREFIX)/bin/mp-check

View File

@ -34,7 +34,7 @@ fi
## global vars ##
#################
warnc=0
tmpdir="/tmp/.mp-clean"
tmpdir="/tmp/.mp-check"
required_files=(
"DATA"
"HASHES"
@ -54,6 +54,7 @@ root_dirs=(
"usr"
"var"
"opt"
"run"
)
bad_vars=(
'$VERSION'
@ -173,6 +174,26 @@ check_archive(){
fail_check
fi
fi
if [ "${k}" == "size" ]; then
if [ ! -z "${line_1}" ]; then
size="$(echo "${line_1}" | sed 's/size= //g')"
size="$(echo "${size}" | sed 's/size=//g')"
else
size="$(echo "${line_2}" | sed 's/size = //g')"
size="$(echo "${size}" | sed 's/size =//g')"
fi
if [ -z "${size}" ]; then
error "Failed to obtain package size information"
fail_check
fi
if [ "${size}" == "0" ]; then
error "Package size information is set as 0, is the package empty?"
fail_check
fi
fi
done
name="$(head -n1 "${tmpdir}/DATA" | sed 's/\[//g')"
@ -183,6 +204,24 @@ check_archive(){
fail_check
fi
case "${name}" in
*_*)
error "Package name contains an invalid character: \"_\""
fail_check ;;
*" "*)
error "Package name contains an invalid character: \" \""
fail_check ;;
esac
case "${version}" in
*_*)
error "Package version contains an invalid character: \"_\""
fail_check ;;
*" "*)
error "Package version contains an invalid character: \" \""
fail_check ;;
esac
filename="${name}_${version}.mpf"
info "Checking HASHES file"
@ -207,8 +246,15 @@ check_archive(){
done < "${tmpdir}/HASHES"
info "Checking files.tar.gz archive"
filec=0
while read p; do
if [ -z "${p}" ]; then
continue
fi
filec=$((filec + 1))
if [ "${p:0:1}" == "." ] || [ "${p:0:1}" == "/" ]; then
error "Root file location is invalid (${p:0:1})"
fail_check
@ -230,6 +276,11 @@ check_archive(){
fi
done < <(tar tf "${tmpdir}/files.tar.gz")
if [ "${filec}" == "0" ]; then
error "Package file archive is empty (no files)"
fail_check
fi
info "Checking INSTALL file"
if [ -f "${tmpdir}/INSTALL" ] && ! grep -q . "${tmpdir}/INSTALL"; then
@ -242,6 +293,10 @@ check_archive(){
add_warning "Changes file is empty"
fi
if ! grep "${version}" "${tmpdir}/CHANGES" &> /dev/null; then
add_warning "Changes potentially does not have an entry for the current version"
fi
info "Checking archive name"
archivefile="$(basename "${archivepath}")"
@ -312,6 +367,12 @@ check_source(){
if ! grep -q . "${sourcepath}/changes.md"; then
add_warning "Changes file is empty"
fi
if ! grep "${VERSION}" "${sourcepath}/changes.md" &> /dev/null; then
add_warning "Changes potentially does not have an entry for the current version"
fi
clean_pkg_vars
}
#################

View File

@ -75,29 +75,35 @@ if [ ! -d "${distpath}" ]; then
exit 1
fi
# source and store every package
# source and store every package
files=("INFO" "LIST")
pc="$(ls -1q "${srcpath}" | wc -l)"
pi=1
pi=0
info "Sourcing all the packages"
set_indent
for pkg in "${srcpath}/"*; do
package=$(basename "${pkg}")
info "(${pi}/${pc}) Sourcing \"${package}\""
pkg_name=$(basename "${pkg}")
pi=$((pi+1))
if should_ignore "${pkg_name}"; then
info "(${pi}/${pc}) Ignoring \"${pkg_name}\""
continue
fi
info "(${pi}/${pc}) Sourcing \"${pkg_name}\""
source "${pkg}/pkg.sh"
check_ret "(${pi}/${pc}) Failed to import the source script for \"${package}\""
check_ret "(${pi}/${pc}) Failed to import the source script for \"${pkg_name}\""
check_pkg_vars
check_ret
files+=("${NAME}_${VERSION}.mpf")
files+=("${NAME}_${VERSION}.mpf.sig")
clean_pkg_vars
pi=$((pi+1))
done
success "Completed"

View File

@ -42,6 +42,7 @@ help_cmd() {
echo_color " $BOLD--no-depend$RESET: don't check depends"
echo_color " $BOLD--no-stdout$RESET: disable stdout for build() function"
echo_color " $BOLD--no-cache$RESET: don't use cache"
echo_color " $BOLD--insecure$RESET: allow insecure curl downloads"
echo_color " $BOLD--no-opts$RESET: don't show/list options"
echo_color " $BOLD--no-sign$RESET: don't sign build packages"
echo_color " $BOLD--cores$RESET: how many cores to use for the build"
@ -74,17 +75,10 @@ list_to_str(){
mp_build_opts(){
local opts=("${1}" "--no-opts" "--out='${2}'")
if [ $OPT_NO_DEPEND -eq 1 ]; then
opts+=("--no-depend")
fi
if [ $OPT_NO_STDOUT -eq 1 ]; then
opts+=("--no-stdout")
fi
if [ $OPT_NO_CACHE -eq 1 ]; then
opts+=("--no-cache")
fi
[ $OPT_NO_DEPEND -eq 1 ] && opts+=("--no-depend")
[ $OPT_NO_STDOUT -eq 1 ] && opts+=("--no-stdout")
[ $OPT_INSECURE -eq 1 ] && opts+=("--insecure")
[ $OPT_NO_CACHE -eq 1 ] && opts+=("--no-cache")
mp-build ${opts[@]}
return "$?"
@ -97,6 +91,7 @@ OPT_SKIP_FAIL=0 # stop build when a package build fails
OPT_NO_DEPEND=0 # checking depends is ENABLED
OPT_NO_STDOUT=0 # build() function output is ENABLED
OPT_NO_CACHE=0 # cache is ENABLED
OPT_INSECURE=0 # insecure curl downloads are DISABLED
OPT_NO_OPTS=0 # showing/listing options is ENABLED
OPT_NO_SIGN=0 # sign all the built packages
OPT_CORES=$(nproc) # use ALL CPU cores
@ -118,6 +113,8 @@ for arg in "$@"; do
OPT_NO_STDOUT=1 ;;
"--no-cache")
OPT_NO_CACHE=1 ;;
"--insecure")
OPT_INSECURE=1 ;;
"--no-opts")
OPT_NO_OPTS=1 ;;
"--no-sign")
@ -162,6 +159,7 @@ if [ $OPT_NO_OPTS -eq 0 ]; then
print " $BOLD NO_DEPEND = $(itoyn $OPT_NO_DEPEND)"
print " $BOLD NO_SDTOUT = $(itoyn $OPT_NO_STDOUT)"
print " $BOLD NO_CACHE = $(itoyn $OPT_NO_CACHE)"
print " $BOLD INSECURE = $(itoyn $OPT_INSECURE)"
print " $BOLD NO_OPTS = $(itoyn $OPT_NO_OPTS)"
print " $BOLD NO_SIGN = $(itoyn $OPT_NO_SIGN)"
print " $BOLD CORES = $OPT_CORES"
@ -205,16 +203,22 @@ fi
# build every package
pc=${#OPT_PACKAGES[@]}
pi=1
pi=0
for pkg_name in "${OPT_PACKAGES[@]}"; do
pkg="${srcpath}/${pkg_name}"
pi=$((pi+1))
if [ ! -d "${pkg}" ]; then
error "Package not found: \"${pkg_name}\""
exit 1
fi
if should_ignore "${pkg_name}"; then
info "(${pi}/${pc}) Ignoring \"${pkg_name}\""
continue
fi
info "(${pi}/${pc}) Building \"${pkg_name}\""
if [ $OPT_SKIP_FAIL -eq 1 ]; then
@ -239,7 +243,6 @@ for pkg_name in "${OPT_PACKAGES[@]}"; do
fi
success "(${pi}/${pc}) Build was successful for \"${pkg_name}\""
pi=$((pi+1))
done
success "Completed all the package builds"

View File

@ -228,5 +228,24 @@ check_pkg_vars() {
return 1 ;;
esac
case "${VERSION}" in
*_*)
error "Package version contains an invalid character: \"_\""
unset_indent
return 1 ;;
*" "*)
error "Package version contains an invalid character: \" \""
unset_indent
return 1 ;;
esac
return 0
}
# check if a package should be ignored
should_ignore(){
for i in "${IGNORE[@]}"; do
[ "${i}" == "${1}" ] && return 0
done
return 1
}