Last active
April 16, 2022 17:35
-
-
Save robertoschwald/e404372e4e6b13cfe20b to your computer and use it in GitHub Desktop.
Script to build a standalone Bacula Client MDMG Package on OSX using MacPorts. Tested on OSX 10.11 using XCode 7.1.1 and Bacula 7.0.4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Script to build MacPorts based OSX Bacula FD Client (7.0.4) in private dir as MDMG installer | |
# containing all dependencies. | |
# (c) 2015 Robert Oschwald | |
# Prerequisites: | |
# - OSX (10.11 tested) | |
# - XCODE (7.1.1 and 7.2.0 tested) | |
# - PackageMaker.app (http://adcdownload.apple.com/Developer_Tools/auxiliary_tools_for_xcode__late_july_2012/xcode44auxtools6938114a.dmg) | |
# Yes, this is an obsolete Apple tool, but MacPORTS still relies on it to generate PKG files. See https://trac.macports.org/ticket/42725 | |
# Usage: simply call this script. It builds a private installation of MacPorts | |
# and builds bacula with all dependencies as a MDMG Meta Package for installation | |
# of the bacula client on many OSX bacula client machines without MacPorts. | |
# Client installation: | |
# Copy the mdmg file to the client machine and install. | |
# Afterwards, you need to configure bacula-fd (/opt/macports-private/etc/bacula/bacula-fd.conf) | |
# Enable the bacula-fd daemon: | |
# "daemondo", the MacPorts Wrapper program is not part of the dmg. | |
# To enable the contained LaunchDaemon plist, you first need to install daemondo from your | |
# MacPorts mdmg build machine to the clients /opt/macports-private/bin dir. | |
# BAT GUI | |
# BAT is NOT included in the MDMG by default. | |
# If you want to build BAT (and it's large amount of dependencies), | |
# enable MP_FLAGS in the config | |
# Version: 1.2.1 | |
# History: | |
# 1.2.1 disable startup item install in private MacPorts | |
# 1.2 El Capitan / XCode 7.1.1 | |
# 1.1 fixes | |
# 1.0 initial version | |
#### | |
# config | |
MP_PREFIX=/opt/macports-private | |
MP_ARCHIVE_NAME="MacPorts-2.3.4" | |
MP_ARCHIVE_FILENAME="${MP_ARCHIVE_NAME}.tar.bz2" | |
MP_URL="https://distfiles.macports.org/MacPorts/${MP_ARCHIVE_FILENAME}" | |
PACKAGE_MAKER="/Applications/PackageMaker.app" | |
export PATH="/bin:/sbin:/usr/bin:/usr/sbin" | |
build_dir=`pwd` | |
# | |
# if you do want to build the BAT GUI application as well, enable | |
#MP_FLAGS="+console_bat" | |
#### | |
if [ ! -d ${PACKAGE_MAKER} ]; then | |
echo "PackageMaker not found. Please install using" | |
echo "https://developer.apple.com/downloads/" | |
echo "(Part of Auxiliary Tools for Xcode Late July 2012. Simply copy PackageMaker.app to /Applications)" | |
exit 7 | |
fi | |
cat <<EOF | |
********************************************************************* | |
This script builds BACULA Client DMG with all MacPorts dependencies | |
for installation in private dir ${MP_PREFIX} | |
This does not clash with any installed default MacPorts | |
You can use the DMG to install on any OSX machine which doesn't need | |
to have MacPorts installed | |
********************************************************************* | |
EOF | |
echo "Are you sure [y]?" | |
read yn | |
if [ "${yn}" != "y" ]; then | |
echo "Aborting" | |
exit 100 | |
fi | |
if [ ! -d ${MP_PREFIX} -a ! -x ${MP_PREFIX}/bin/port ]; then | |
echo "MacPorts doesn's seem to be installed in ${MP_PREFIX}, yet" | |
echo "Fetching ${MP_URL}" | |
curl -O ${MP_URL} | |
if [ ! -f ${MP_ARCHIVE_FILENAME} ]; then | |
echo "Downloading file ${MP_URL} failed" | |
exit 1 | |
fi | |
## build in private dir prefix | |
tar xf $MP_ARCHIVE_FILENAME | |
cd $MP_ARCHIVE_NAME/ | |
./configure --prefix=$MP_PREFIX --with-applications-dir=$MP_PREFIX/Applications | |
if [ $? != 0 ]; then | |
echo "configure failed." | |
exit 2 | |
fi | |
make | |
echo "Installing MacPorts into ${MP_PREFIX}" | |
sudo make install | |
if [ $? != 0 ]; then | |
echo "Installing MacPorts into ${MP_PREFIX} failed" | |
exit 3 | |
fi | |
echo "INSTALLATION DONE." | |
else | |
echo "MacPorts already installed in ${MP_PREFIX}" | |
fi | |
export PATH=${MP_PREFIX}/bin:$PATH | |
echo "Now syncing ports.." | |
sudo ${MP_PREFIX}/bin/port -v selfupdate | |
echo "Modifying ${MP_PREFIX} to not automatically install startup items" | |
sudo cp ${MP_PREFIX}/etc/macports/macports.conf ${MP_PREFIX}/etc/macports/macports.conf.dist | |
sudo sed -i '' -e 's/startupitem_install yes/startupitem_install no/' ${MP_PREFIX}/etc/macports/macports.conf | |
echo " Modifying bacula port file to only build the bacula-fd client (Bug #49203)" | |
cd `port dir bacula` | |
sudo cp Portfile Portfile.dist | |
sudo sed -i '' -e 's/\+console_bat/\+client_only/' Portfile | |
echo " " | |
echo " " | |
echo "Building Bacula-FD MPKG" | |
sudo ${MP_PREFIX}/bin/port clean bacula | |
sudo ${MP_PREFIX}/bin/port mdmg bacula ${MP_FLAGS} | |
if [ $? = 0 ]; then | |
mpkg_loc=`port work bacula` | |
echo "Done." | |
echo "You might find the mdmg in ${mpkg_loc}" | |
popd | |
fi | |
cat <<EOF | |
********************************************************************* | |
You can copy the mdmg file (or mpkg if you prefer that) to your bacula client machine and install. | |
Do not forget to copy ${MP_PREFIX}/bin/daemondo manually onto the | |
client as well. | |
After you configured bacula-fd (${MP_PREFIX}/etc/bacula/bacula-fd.conf), | |
you can enable the daemon by: | |
sudo bash | |
cd /Library/LaunchDaemons | |
ln -s ${MP_PREFIX}/etc/LaunchDaemons/org.macports.bacula/org.macports.bacula.plist | |
chmod 644 ${MP_PREFIX}/etc/LaunchDaemons/org.macports.bacula/org.macports.bacula.plist | |
chgrp wheel ${MP_PREFIX}/etc/LaunchDaemons/org.macports.bacula/org.macports.bacula.plist | |
launchctl load -w /Library/LaunchDaemons/org.macports.bacula.plist | |
********************************************************************* | |
Have a nice day. | |
EOF | |
# cleanup | |
cd $build_dir | |
rm ${MP_ARCHIVE_FILENAME} | |
rm -rf ${MP_ARCHIVE_NAME} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Copy the raw version of the script into a file on your OSX machine. Then make the file executable in the Terminal:
Now execute the script in your terminal:
Ensure XCode is installed on your machine before executing.