87 lines
2.3 KiB
Bash
87 lines
2.3 KiB
Bash
# Create a Debian package from a binary
|
|
# Usage: make_binary_deb binary_path package_name version
|
|
make_binary_deb() {
|
|
local binary="$1"
|
|
local pkgname="$2"
|
|
local version="$3"
|
|
local maintainer="Christoph J. Scherr <software@cscherr.de>"
|
|
|
|
# Check if all arguments are provided
|
|
if [ -z "$binary" ] || [ -z "$pkgname" ] || [ -z "$version" ]; then
|
|
echo "Usage: make_binary_deb binary_path package_name version"
|
|
return 1
|
|
fi
|
|
|
|
# Check if binary exists
|
|
if [ ! -f "$binary" ]; then
|
|
echo "Error: Binary $binary not found"
|
|
return 1
|
|
}
|
|
|
|
# Create package directory structure
|
|
local pkgdir="${pkgname}_${version}"
|
|
mkdir -p "${pkgdir}/usr/local/bin"
|
|
mkdir -p "${pkgdir}/DEBIAN"
|
|
|
|
# Copy and set permissions
|
|
cp "$binary" "${pkgdir}/usr/local/bin/"
|
|
chmod 755 "${pkgdir}/usr/local/bin/$(basename "$binary")"
|
|
|
|
# Create control file
|
|
cat > "${pkgdir}/DEBIAN/control" << EOF
|
|
Package: $pkgname
|
|
Version: $version
|
|
Section: utils
|
|
Priority: optional
|
|
Architecture: amd64
|
|
Maintainer: $maintainer
|
|
Description: Binary package for $(basename "$binary")
|
|
Automatically packaged binary for $(basename "$binary")
|
|
EOF
|
|
|
|
# Build package
|
|
dpkg-deb --build "$pkgdir"
|
|
|
|
# Clean up
|
|
rm -rf "$pkgdir"
|
|
|
|
echo "Package created: ${pkgdir}.deb"
|
|
}
|
|
|
|
# Install a downloaded binary as a Debian package
|
|
# Usage: install_binary_as_deb binary_url package_name version
|
|
install_binary_as_deb() {
|
|
local url="$1"
|
|
local pkgname="$2"
|
|
local version="$3"
|
|
|
|
if [ -z "$url" ] || [ -z "$pkgname" ] || [ -z "$version" ]; then
|
|
echo "Usage: install_binary_as_deb binary_url package_name version"
|
|
return 1
|
|
}
|
|
|
|
# Create temp directory
|
|
local tmpdir=$(mktemp -d)
|
|
cd "$tmpdir"
|
|
|
|
# Download and extract if it's a tar.gz
|
|
if [[ "$url" == *".tar.gz" ]]; then
|
|
wget "$url" -O "${pkgname}.tar.gz"
|
|
tar xf "${pkgname}.tar.gz"
|
|
# Assume binary has same name as package
|
|
local binary="$pkgname"
|
|
else
|
|
wget "$url" -O "$pkgname"
|
|
chmod +x "$pkgname"
|
|
local binary="$pkgname"
|
|
fi
|
|
|
|
# Create and install package
|
|
make_binary_deb "$binary" "$pkgname" "$version"
|
|
sudo dpkg -i "${pkgname}_${version}.deb"
|
|
|
|
# Clean up
|
|
cd - > /dev/null
|
|
rm -rf "$tmpdir"
|
|
}
|