PHP familiarity shortcuts

This commit is contained in:
udo
2026-04-19 21:15:52 +00:00
parent af642c8167
commit dc05f9faa5
29 changed files with 633 additions and 174 deletions
+124 -33
View File
@@ -1,46 +1,137 @@
#!/bin/bash
cd "$(dirname "$0")"
cd ..
#!/usr/bin/env bash
set -euo pipefail
if [ -z "$1" ]
then
echo "Usage: make_deb.sh VERSION"
exit
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
DEB_ASSET_DIR="$SCRIPT_DIR/deb"
PACKAGE_NAME="uce"
REVISION="${UCE_DEB_REVISION:-1}"
usage() {
cat <<'EOF'
Usage:
scripts/make_deb.sh VERSION
Environment:
UCE_DEB_REVISION Debian package revision suffix (default: 1)
UCE_DEB_ARCH Override package architecture
EOF
}
require_command() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "Required command not found: $1" >&2
exit 1
fi
}
resolve_arch() {
if [[ -n "${UCE_DEB_ARCH:-}" ]]; then
printf '%s\n' "$UCE_DEB_ARCH"
return
fi
if command -v dpkg-architecture >/dev/null 2>&1; then
dpkg-architecture -qDEB_HOST_ARCH
return
fi
dpkg --print-architecture
}
validate_version() {
local version="$1"
if [[ ! "$version" =~ ^[0-9][A-Za-z0-9.+:~]*$ ]]; then
echo "Invalid Debian version string: $version" >&2
exit 1
fi
}
copy_payload() {
local destination="$1"
local path
for path in LICENSE README.md codesearch bin scripts site src; do
cp -a "$REPO_ROOT/$path" "$destination/"
done
mkdir -p "$destination/etc"
cp -a "$REPO_ROOT/etc/uce" "$destination/etc/"
}
write_control_file() {
local output_file="$1"
local package_version="$2"
local arch="$3"
local installed_size="$4"
sed \
-e "s/@PACKAGE_NAME@/$PACKAGE_NAME/g" \
-e "s/@VERSION@/$package_version/g" \
-e "s/@ARCH@/$arch/g" \
-e "s/@INSTALLED_SIZE@/$installed_size/g" \
"$DEB_ASSET_DIR/control.in" > "$output_file"
}
write_md5sums() {
local stage_dir="$1"
(
cd "$stage_dir"
find usr etc lib -type f -print0 | sort -z | xargs -0 md5sum > DEBIAN/md5sums
)
}
if [[ $# -ne 1 ]]; then
usage >&2
exit 1
fi
VERSION=$1
REV=1
PROJECT="uce"
VERSION="$1"
validate_version "$VERSION"
PKG_NAME="${PROJECT}_$VERSION.$REV"
require_command bash
require_command clang++
require_command dpkg-deb
require_command dpkg
require_command install
require_command find
require_command xargs
require_command md5sum
require_command mysql_config
require_command du
require_command sed
require_command awk
require_command cp
require_command sort
echo "Making package $PKG_NAME"
ARCH="$(resolve_arch)"
PACKAGE_VERSION="${VERSION}-${REVISION}"
PACKAGE_BASENAME="${PACKAGE_NAME}_${PACKAGE_VERSION}_${ARCH}"
STAGE_DIR="$REPO_ROOT/pkg/$PACKAGE_BASENAME"
DEBIAN_DIR="$STAGE_DIR/DEBIAN"
INSTALL_ROOT="$STAGE_DIR/usr/lib/uce"
DIST_DIR="$REPO_ROOT/dist"
OUTPUT_DEB="$DIST_DIR/$PACKAGE_BASENAME.deb"
echo "Making package $PACKAGE_BASENAME"
echo "==================================="
scripts/build_linux.sh
bash "$REPO_ROOT/scripts/build_linux.sh"
rm -r "pkg/$PKG_NAME"
mkdir -p "pkg/$PKG_NAME/opt/uce/"
mkdir -p "pkg/$PKG_NAME/DEBIAN/"
mkdir -p "pkg/$PKG_NAME/etc/uce/"
mkdir -p "dist"
rm -rf -- "$STAGE_DIR"
mkdir -p "$DEBIAN_DIR" "$INSTALL_ROOT" "$STAGE_DIR/etc/uce" "$STAGE_DIR/lib/systemd/system" "$DIST_DIR"
cp scripts/control "pkg/$PKG_NAME/DEBIAN/"
echo "Version: $VERSION" >> "pkg/$PKG_NAME/DEBIAN/control"
echo "" >> "pkg/$PKG_NAME/DEBIAN/control"
copy_payload "$INSTALL_ROOT"
cp -r bin "pkg/$PKG_NAME/opt/uce/"
cp -r doc "pkg/$PKG_NAME/opt/uce/"
cp -r examples "pkg/$PKG_NAME/opt/uce/"
cp -r scripts "pkg/$PKG_NAME/opt/uce/"
cp -r test "pkg/$PKG_NAME/opt/uce/"
cp -r etc "pkg/$PKG_NAME/"
install -m 0644 "$REPO_ROOT/etc/uce/settings.cfg" "$STAGE_DIR/etc/uce/settings.cfg"
install -m 0644 "$DEB_ASSET_DIR/uce.service" "$STAGE_DIR/lib/systemd/system/uce.service"
install -m 0644 "$DEB_ASSET_DIR/conffiles" "$DEBIAN_DIR/conffiles"
install -m 0755 "$DEB_ASSET_DIR/postinst" "$DEBIAN_DIR/postinst"
install -m 0755 "$DEB_ASSET_DIR/prerm" "$DEBIAN_DIR/prerm"
install -m 0755 "$DEB_ASSET_DIR/postrm" "$DEBIAN_DIR/postrm"
du -sh "pkg/$PKG_NAME/"*
INSTALLED_SIZE="$(du -sk "$STAGE_DIR" | awk '{print $1}')"
write_control_file "$DEBIAN_DIR/control" "$PACKAGE_VERSION" "$ARCH" "$INSTALLED_SIZE"
write_md5sums "$STAGE_DIR"
cd pkg
dpkg-deb --build "$PKG_NAME"
mv "$PKG_NAME.deb" "../dist/"
cd ..
dpkg-deb --root-owner-group --build "$STAGE_DIR" "$OUTPUT_DEB"
ls -lh "dist/" | grep "$PKG_NAME"
dpkg-deb -I "$OUTPUT_DEB" | sed -n '1,80p'
echo
dpkg-deb -c "$OUTPUT_DEB" | sed -n '1,60p'