137 lines
3.4 KiB
Bash
Executable File
137 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
MODE="${1:-}"
|
|
|
|
usage() {
|
|
cat >&2 <<'EOF'
|
|
Uso:
|
|
server: bootstrap_docs_lan_share.sh server /percorso/day0 192.168.0.0/24 [share_dir] [modules_csv]
|
|
client: bootstrap_docs_lan_share.sh client host:/export/path /mount/point /workspace/path
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
require_cmd() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
echo "Comando richiesto non trovato: $1" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
copy_tree() {
|
|
local src="$1"
|
|
local dst="$2"
|
|
|
|
mkdir -p "$dst"
|
|
|
|
if command -v rsync >/dev/null 2>&1; then
|
|
rsync -a --delete "$src/" "$dst/"
|
|
else
|
|
rm -rf "$dst"
|
|
mkdir -p "$dst"
|
|
cp -a "$src/." "$dst/"
|
|
fi
|
|
}
|
|
|
|
server_mode() {
|
|
local day0_root="${2:-}"
|
|
local network_cidr="${3:-}"
|
|
local share_dir="${4:-/srv/netgescon/shared-docs}"
|
|
local modules_csv="${5:-docs,scripts/ai}"
|
|
local -a module_paths=()
|
|
local module
|
|
|
|
[[ -n "$day0_root" && -n "$network_cidr" ]] || usage
|
|
[[ -d "$day0_root/docs" ]] || { echo "docs/ non trovata in $day0_root" >&2; exit 1; }
|
|
[[ -d "$day0_root/scripts/ai" ]] || { echo "scripts/ai non trovata in $day0_root" >&2; exit 1; }
|
|
|
|
mkdir -p "$share_dir/scripts" "$share_dir/exchange" "$share_dir/modules"
|
|
copy_tree "$day0_root/docs" "$share_dir/docs"
|
|
copy_tree "$day0_root/scripts/ai" "$share_dir/scripts/ai"
|
|
|
|
IFS=',' read -r -a module_paths <<< "$modules_csv"
|
|
for module in "${module_paths[@]}"; do
|
|
module="${module#./}"
|
|
module="${module%/}"
|
|
|
|
[[ -n "$module" ]] || continue
|
|
[[ "$module" == "docs" || "$module" == "scripts/ai" ]] && continue
|
|
|
|
if [[ -d "$day0_root/$module" ]]; then
|
|
mkdir -p "$share_dir/modules/$(dirname "$module")"
|
|
copy_tree "$day0_root/$module" "$share_dir/modules/$module"
|
|
fi
|
|
done
|
|
|
|
cat <<EOF
|
|
SERVER_SHARE_DIR=$share_dir
|
|
SERVER_EXPORT_LINE=$share_dir $network_cidr(ro,sync,no_subtree_check)
|
|
|
|
Comandi lato server:
|
|
sudo mkdir -p $share_dir
|
|
echo '$share_dir $network_cidr(ro,sync,no_subtree_check)' | sudo tee /etc/exports.d/netgescon-docs.exports
|
|
sudo exportfs -rav
|
|
sudo systemctl enable --now nfs-server
|
|
|
|
Contenuto pronto:
|
|
$share_dir/docs
|
|
$share_dir/scripts/ai
|
|
$share_dir/exchange
|
|
$share_dir/modules
|
|
|
|
Nota moduli:
|
|
moduli richiesti = $modules_csv
|
|
i moduli presenti vengono copiati sotto $share_dir/modules/
|
|
EOF
|
|
}
|
|
|
|
client_mode() {
|
|
local remote_export="${2:-}"
|
|
local mount_point="${3:-}"
|
|
local workspace_dir="${4:-}"
|
|
|
|
[[ -n "$remote_export" && -n "$mount_point" && -n "$workspace_dir" ]] || usage
|
|
require_cmd ln
|
|
|
|
mkdir -p "$mount_point"
|
|
mkdir -p "$workspace_dir/scripts" "$workspace_dir/modules"
|
|
mkdir -p "$workspace_dir/notes"
|
|
|
|
ln -sfn "$mount_point/docs" "$workspace_dir/docs"
|
|
ln -sfn "$mount_point/scripts/ai" "$workspace_dir/scripts/ai"
|
|
ln -sfn "$mount_point/exchange" "$workspace_dir/exchange"
|
|
ln -sfn "$mount_point/modules" "$workspace_dir/modules/shared"
|
|
|
|
cat <<EOF
|
|
CLIENT_REMOTE_EXPORT=$remote_export
|
|
CLIENT_MOUNT_POINT=$mount_point
|
|
CLIENT_WORKSPACE_DIR=$workspace_dir
|
|
|
|
Comando mount manuale:
|
|
sudo mount -t nfs $remote_export $mount_point
|
|
|
|
Riga suggerita per /etc/fstab:
|
|
$remote_export $mount_point nfs defaults,_netdev 0 0
|
|
|
|
Workspace pronto:
|
|
$workspace_dir
|
|
$workspace_dir/docs -> $mount_point/docs
|
|
$workspace_dir/scripts/ai -> $mount_point/scripts/ai
|
|
$workspace_dir/exchange -> $mount_point/exchange
|
|
$workspace_dir/modules/shared -> $mount_point/modules
|
|
EOF
|
|
}
|
|
|
|
case "$MODE" in
|
|
server)
|
|
server_mode "$@"
|
|
;;
|
|
client)
|
|
client_mode "$@"
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac |