Bash-Scripting: Hilfe gesucht

Ich bin ja nicht ganz doof, und bekomme einfache Skripte hin. Trotzdem würde mir wohl gerade ein Telefonat und zweites Augenpaar helfen, ein Script zu erstellen, dass einen nextcloud-webdav-mountpoint und alles drumherum einrichtet.

Per Hand ausgeführt funktionieren die Schritte schon, nur stolpere ich (mal wieder) hier und da über shell-stolpersteine.

Freue mich, wenn sich jemand anbietet, ggfs auch nur mit mittelmäßiger Erfahrung, aber meistens sehen vier Augen halt mehr als zwei…

Der “Stack”: bash, zenity, davfs2. Soll am Ende dann in ein .deb-Paket verpackt werden (das mache ich in der Regel mit dem genialem fpm).

Wieso postest du die funktionierenden, manuellen Befehle nicht hier + das Skript als Vergleich inkl. den Stolpersteinen? Dann hättest du potentiell sogar mehr als ein Augenpaar, das draufschaut. :wink: Oder ist das Ding zu groß?

Liebe Grüße,
Micha

Sure,
Es geht grob um das folgende:

  # Prepare directories needed by user davfs2 mount
  mkdir -p ${nextcloud_user_mountpoint} $HOME/.davfs2/certs

  # Configure credentials for davfs/nextcloud
  echo https://${nextcloud_hostname}/remote.php/webdav ${nextcloud_username} ${nextcloud_password} > $HOME/.davfs2/secrets

  # Restrict access to secrets
  chmod 600 ~/.davfs2/secrets

  # Fetch server certificate
  echo | \
      openssl s_client -servername ${nextcloud_hostname} -connect ${nextcloud_hostname}:443 2>/dev/null | \
      openssl x509 -outform pem > $HOME/.davfs2/certs/cloud.pem

  # Register server certificate
  echo trust_server_cert $HOME/.davfs2/certs/cloud.pem > $HOME/.davfs2/davfs2.conf

  # Add user to davfs2 group
  sudo -S usermod -a -G davfs2 $USER

  # Add fstab entry
  echo "https://${nextcloud_hostname}/remote.php/webdav ${nextcloud_user_mountpoint} davs auto,user,_netdev 0 0" | sudo tee -a /etc/fstab

Es fehlen natürlich die user-inputs und gewisse safety-nets, also z.B. sollte der fstab-Eintrag nicht zweimal eingetragen werden, etc.pp. Das ganze will ich mit zenity außenrum stricken (und hab auch damit angefangen, aber DEN code zeige ich hier nicht :slight_smile: ).

(https://github.com/ecovillage/wolkomount/blob/master/content/opt/7linden/wolke7/install_nexcloud_user_access.sh)

https://github.com/ecovillage/wolkomount

Ach und bei einer frischen Installation muss man auch noch das suid-bit von davfs2.mount setzen, glaube ich. Habe da irgendwo einen code-schnipsel dafür. Ansonsten bei der installation des pakets bestätigen, dass auch nutzer mounten dürfen (das debian/ubuntu paket fragt das bei installation oder dpkg-reconfigure ab).

Ach, und wer Lust hat zu basteln: Gerne im Austausch, also du fuddelst an meinem Script, ich an deinem.

Beschreib doch mal genauer, wo was schief läuft, damit man nicht raten muss. :wink: Weil: Ich würde dich so einschätzen, dass wenn’s via manueller Eingabe läuft eine Bash-Skript-Umsetzung für dich kein Problem darstellen sollte …?

Btw. Ich kenne mich nicht mit dem aus, was du da machen möchtest, aber ich habe mir grundsätzlich angewöhnt für meine Befehle in den Skripten einen Wrapper zu verwenden, was das Debugging etwas vereinfacht:

# Defines whether processing-information is shown
VERBOSE=true

# Wrapper for command-execution including debug-information if command didn't return 0
# @param string command executed
# @param string process-information which is shown if VERBOSE=true
function exec_command {
eval $1
if [ $? -ne 0 ]; then
	echo "WARNING! There was a problem with the following command: '$1'. Script terminated."
	exit 1
else
	if [ -n "$2" ] && [ "$VERBOSE" = true ]; then
		echo "... $2 (command used: '$1')."
	fi
fi	
}

Ausführung im Skript dann entsprechend so:

exec_command "hdiutil attach -noverify $IMAGE" "image mounted"

Schwierig war vor allem ein Frontend mit z.B. zenity und die diversen checks, ob die Dateien schon vorhanden sind etc.
Letztendlich musste ich aber von davfs2 Abstand nehmen. Die Nextcloud lässt sich damit performance-mäßig leider (in meinem Setup…?) nicht als Netzwerklaufwerk einrichten, mit dem man jeden Tag arbeiten möchte. Die webdav-Implementierung der Dateibrowser (z.B. Nautilus), bzw vermutlich das unterliegende gvfs-backend sind performanter, aber immer noch zu lahm und zäh. Sehr blöd. Gerade ein echter Blocker für mich, Sieben Linden und nextcloud …