mirror of
https://github.com/jordansissel/fpm
synced 2025-02-23 01:51:16 +01:00
118 lines
2.9 KiB
Bash
Executable File
118 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
source="<%= attributes[:prefix] %>"
|
|
|
|
cleanup_script="$source/cleanup.sh"
|
|
|
|
silent() {
|
|
"$@" > /dev/null 2>&1
|
|
}
|
|
|
|
install_files() {
|
|
# TODO(sissel): Need to know what prefix the files exist at
|
|
platform="$1"
|
|
version="$(version_${platform})"
|
|
|
|
(
|
|
# TODO(sissel): Should I just rely on rsync for this stuff?
|
|
cd "${source}/${platform}/${version}/files/" || exit 1
|
|
|
|
# Write a cleanup script
|
|
find . -print0 | xargs -r0 -n1 "$source/generate-cleanup.sh" > "$cleanup_script"
|
|
|
|
# Actually do the installation
|
|
find . -print0 | xargs -r0 -n1 "$source/install-path.sh"
|
|
)
|
|
}
|
|
|
|
install_actions() {
|
|
# TODO(sissel): Need to know what prefix the files exist at
|
|
platform="$1"
|
|
version="$(version_${platform})"
|
|
|
|
|
|
actions="${source}/${platform}/${version}/install_actions.sh"
|
|
if [ -f "$actions" ] ; then
|
|
. "$actions"
|
|
fi
|
|
}
|
|
|
|
version_systemd() {
|
|
# Treat all systemd versions the same
|
|
echo default
|
|
}
|
|
|
|
version_launchd() {
|
|
# Treat all launchd versions the same
|
|
echo 10.9
|
|
}
|
|
|
|
version_upstart() {
|
|
# Treat all upstart versions the same
|
|
# TODO(sissel): Upstart 0.6.5 needs to be handled specially.
|
|
version="$(initctl --version | head -1 | tr -d '()' | awk '{print $NF}')"
|
|
|
|
case $version in
|
|
0.6.5) echo $version ;;
|
|
*) echo "1.5" ;; # default modern assumption
|
|
esac
|
|
}
|
|
|
|
version_sysv() {
|
|
# TODO(sissel): Once pleaserun supports multiple sysv implementations, maybe
|
|
# we inspect the OS to find out what we should target.
|
|
echo lsb-3.1
|
|
}
|
|
|
|
has_systemd() {
|
|
# Some OS vendors put systemd in ... different places ...
|
|
[ -d "/lib/systemd/system/" -o -d "/usr/lib/systemd/system" ] && silent which systemctl
|
|
}
|
|
|
|
has_upstart() {
|
|
[ -d "/etc/init" ] && silent which initctl
|
|
}
|
|
|
|
has_sysv() {
|
|
[ -d "/etc/init.d" ]
|
|
}
|
|
|
|
#has_freebsd_rcng() {
|
|
#[ -d "/etc/rc.d" ] && silent which rcorder
|
|
#}
|
|
|
|
has_daemontools() {
|
|
[ -d "/service" ] && silent which sv
|
|
}
|
|
|
|
has_launchd() {
|
|
[ -d "/Library/LaunchDaemons" ] && silent which launchtl
|
|
}
|
|
|
|
install_help() {
|
|
case $platform in
|
|
systemd) echo "To start this service, use: systemctl start <%= attributes[:pleaserun_name] %>" ;;
|
|
upstart) echo "To start this service, use: initctl start <%= attributes[:pleaserun_name] %>" ;;
|
|
launchd) echo "To start this service, use: launchctl start <%= attributes[:pleaserun_name] %>" ;;
|
|
sysv) echo "To start this service, use: /etc/init.d/<%= attributes[:pleaserun_name] %> start" ;;
|
|
esac
|
|
}
|
|
|
|
platforms="systemd upstart launchd sysv"
|
|
installed=0
|
|
for platform in $platforms ; do
|
|
if has_$platform ; then
|
|
version="$(version_$platform)"
|
|
echo "Platform $platform ($version) detected. Installing service."
|
|
install_files $platform
|
|
install_actions $platform
|
|
install_help $platform
|
|
installed=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$installed" -eq 0 ] ; then
|
|
echo "Failed to detect any service platform, so no service was installed. Files are available in ${source} if you need them."
|
|
fi
|