diff --git a/scripts/netclient-install.sh b/scripts/netclient-install.sh index e728c2be..f1b9760e 100755 --- a/scripts/netclient-install.sh +++ b/scripts/netclient-install.sh @@ -7,6 +7,8 @@ fi echo "checking dependencies..." +OS=$(uname) + if [ -f /etc/debian_version ]; then install_cmd='apt-get install -y' elif [ -f /etc/alpine-release ]; then @@ -15,6 +17,8 @@ elif [ -f /etc/centos-release ]; then install_cmd='yum install -y' elif [ -f /etc/fedora-release ]; then install_cmd='dnf install -y' +elif [ OS == "FreeBSD" ]; then + install_cmd='pkg install -y' else install_cmd='' fi @@ -27,21 +31,41 @@ dependencies="wireguard" set -- $dependencies while [ -n "$1" ]; do echo $1 - is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed") - if [ "${is_installed}" = "install ok installed" ]; then - echo " " $1 is installed - else - echo " " $1 is not installed. Attempting install. - ${install_cmd} $1 - sleep 5 - is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed") - if [ "${is_installed}" = "install ok installed" ]; then - echo " " $1 is installed - elif [ -x "$(command -v $1)" ]; then + if [ OS == "FreeBSD" ]; then + is_installed=$(pkg check -d $1 | grep '100%') + if [ "${is_installed}" = '100%' ]; then echo " " $1 is installed else - echo " " FAILED TO INSTALL $1 - echo " " This may break functionality. + echo " " $1 is not installed. Attempting install. + ${install_cmd} $1 + sleep 5 + is_installed=$(pkg check -d $1 | grep '100%') + if [ "${is_installed}" = '100%' ]; then + echo " " $1 is installed + elif [ -x "$(command -v $1)" ]; then + echo " " $1 is installed + else + echo " " FAILED TO INSTALL $1 + echo " " This may break functionality. + fi + fi + else + is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed") + if [ "${is_installed}" = "install ok installed" ]; then + echo " " $1 is installed + else + echo " " $1 is not installed. Attempting install. + ${install_cmd} $1 + sleep 5 + is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed") + if [ "${is_installed}" = "install ok installed" ]; then + echo " " $1 is installed + elif [ -x "$(command -v $1)" ]; then + echo " " $1 is installed + else + echo " " FAILED TO INSTALL $1 + echo " " This may break functionality. + fi fi fi shift @@ -93,6 +117,36 @@ case $(uname | tr '[:upper:]' '[:lower:]') in darwin) dist=netclient-darwin ;; + freebsd*) + if [ -z "$CPU_ARCH" ]; then + CPU_ARCH=$(uname -m) + fi + case $CPU_ARCH in + amd64) + dist=netclient-freebsd + ;; + x86_64) + dist=netclient-freebsd + ;; + x86_32) + dist=netclient-freebsd-32 + ;; + arm64) + dist=netclient-freebsd-arm64 + ;; + aarch64) + dist=netclient-freebsd-arm64 + ;; + armv7l) + dist=netclient-freebsd-armv7 + ;; + arm*) + dist=netclient-freebsd-$CPU_ARCH + ;; + *) + fatal "$CPU_ARCH : cpu architecture not supported" + esac + ;; esac echo "Binary = $dist" @@ -107,10 +161,40 @@ else fi chmod +x netclient +EXTRA_ARGS = "" +if [ OS == "FreeBSD" ]; then + EXTRA_ARGS = "--daemon=off" +fi + if [ -z "${NAME}" ]; then -sudo ./netclient join -t $KEY +sudo ./netclient join -t $KEY EXTRA_ARGS else -sudo ./netclient join -t $KEY --name $NAME +sudo ./netclient join -t $KEY --name $NAME EXTRA_ARGS fi rm -f netclient + +if [ OS == "FreeBSD" ]; then + tee /usr/local/etc/rc.d/netclient <<'EOF' >/dev/null +#!/bin/sh + +# PROVIDE: netclient +# REQUIRE: LOGIN DAEMON NETWORKING SERVERS FILESYSTEM +# BEFORE: +# KEYWORD: shutdown + +. /etc/rc.subr + +name="netclient" +rcvar=netclient_enable +pidfile="/var/run/${name}.pid" +command="/usr/sbin/daemon" +command_args="-c -f -P ${pidfile} -R 10 -t "Netclient" -u root -o /etc/netclient/netclient.log /etc/netclient/netclient checkin -n all" + +load_rc_config $name +run_rc_command "$1" + +EOF + /usr/local/etc/rc.d/netclient enable + /usr/local/etc/rc.d/netclient start +fi \ No newline at end of file diff --git a/scripts/netclient-rc-freebsd b/scripts/netclient-rc-freebsd new file mode 100644 index 00000000..cef47fa7 --- /dev/null +++ b/scripts/netclient-rc-freebsd @@ -0,0 +1,17 @@ +#!/bin/sh + +# PROVIDE: netclient +# REQUIRE: LOGIN DAEMON NETWORKING SERVERS FILESYSTEM +# BEFORE: +# KEYWORD: shutdown + +. /etc/rc.subr + +name="netclient" +rcvar=netclient_enable +pidfile="/var/run/${name}.pid" +command="/usr/sbin/daemon" +command_args="-c -f -P ${pidfile} -R 10 -t "Netclient" -u root -o /etc/netclient/netclient.log /etc/netclient/netclient checkin -n all" + +load_rc_config $name +run_rc_command "$1"