feat: Deduplicate Samba daemon startup (#1840)

This commit is contained in:
Kroese
2026-07-12 22:51:48 +02:00
committed by GitHub
parent 3a0b973c0b
commit 0b119d589c
+42 -39
View File
@@ -24,14 +24,15 @@ configureNetwork() {
interfaces="$DEV" interfaces="$DEV"
else else
hostname="host.lan" hostname="host.lan"
case "${NETWORK,,}" in
"passt" | "slirp" ) if isUserMode; then
interfaces="lo" interfaces="lo"
socket="127.0.0.1" ;; socket="127.0.0.1"
*) else
socket="$IP" socket="$IP"
interfaces="$BRIDGE" ;; interfaces="$BRIDGE"
esac fi
if [ -n "${SAMBA_INTERFACE:-}" ]; then if [ -n "${SAMBA_INTERFACE:-}" ]; then
interfaces+=",$SAMBA_INTERFACE" interfaces+=",$SAMBA_INTERFACE"
fi fi
@@ -95,11 +96,11 @@ addShare() {
fi fi
if [ -z "$(ls -A "$dir")" ]; then if [ -z "$(ls -A "$dir")" ]; then
if ! chmod 2777 "$dir"; then if ! chmod 2777 "$dir"; then
error "Failed to set permissions for directory $dir" && return 1 error "Failed to set permissions for directory $dir" && return 1
fi fi
if ! owner=$(stat -c %u "$dir"); then if ! owner=$(stat -c %u "$dir"); then
error "Failed to determine ownership for directory $dir" error "Failed to determine ownership for directory $dir"
return 1 return 1
@@ -110,11 +111,11 @@ addShare() {
error "Failed to set ownership for directory $dir" && return 1 error "Failed to set ownership for directory $dir" && return 1
fi fi
fi fi
fi fi
if [[ "$dir" == "$tmp" ]]; then if [[ "$dir" == "$tmp" ]]; then
writeReadme "$dir" "$ref" writeReadme "$dir" "$ref" || return 1
fi fi
if ! { if ! {
@@ -196,9 +197,10 @@ addOptionalShare() {
prepareSambaDirs() { prepareSambaDirs() {
# Create directories if missing # Create directories if missing
mkdir -p /var/lib/samba/sysvol mkdir -p \
mkdir -p /var/lib/samba/private /var/lib/samba/sysvol \
mkdir -p /var/lib/samba/bind-dns /var/lib/samba/private \
/var/lib/samba/bind-dns || return 1
# Try to repair Samba permissions # Try to repair Samba permissions
[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || :
@@ -219,16 +221,28 @@ debugLog() {
return 0 return 0
} }
startSamba() { startDaemon() {
rm -f /var/log/samba/log.smbd local name="$1"
local log="$2"
shift 2
if ! smbd -l /var/log/samba; then rm -f "$log"
if ! "$@"; then
SAMBA_DEBUG="Y" SAMBA_DEBUG="Y"
error "Failed to start Samba daemon!" error "Failed to start $name daemon!"
fi fi
debugLog /var/log/samba/log.smbd debugLog "$log"
return 0
}
startSamba() {
startDaemon "Samba" "/var/log/samba/log.smbd" \
smbd -l /var/log/samba
return 0 return 0
} }
@@ -237,14 +251,9 @@ startNetbios() {
# Enable NetBIOS on Windows 7 and lower # Enable NetBIOS on Windows 7 and lower
enabled "$DEBUG" && echo "Starting NetBIOS daemon..." enabled "$DEBUG" && echo "Starting NetBIOS daemon..."
rm -f /var/log/samba/log.nmbd startDaemon "NetBIOS" "/var/log/samba/log.nmbd" \
nmbd -l /var/log/samba
if ! nmbd -l /var/log/samba; then
SAMBA_DEBUG="Y"
error "Failed to start NetBIOS daemon!"
fi
debugLog /var/log/samba/log.nmbd
return 0 return 0
} }
@@ -252,14 +261,11 @@ startWsddn() {
# Enable Web Service Discovery on Vista and up # Enable Web Service Discovery on Vista and up
enabled "$DEBUG" && echo "Starting wsddn daemon..." enabled "$DEBUG" && echo "Starting wsddn daemon..."
rm -f /var/log/wsddn.log
if ! wsddn -i "${interfaces%%,*}" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file="$DDN_PID"; then startDaemon "wsddn" "/var/log/wsddn.log" \
SAMBA_DEBUG="Y" wsddn -i "${interfaces%%,*}" -H "$hostname" \
error "Failed to start wsddn daemon!" --unixd --log-file=/var/log/wsddn.log --pid-file="$DDN_PID"
fi
debugLog /var/log/wsddn.log
return 0 return 0
} }
@@ -269,7 +275,7 @@ html "Initializing shared folder..."
SAMBA_CONFIG="/etc/samba/smb.conf" SAMBA_CONFIG="/etc/samba/smb.conf"
enabled "$DEBUG" && echo "Starting Samba daemon..." enabled "$DEBUG" && echo "Starting Samba daemon..."
writeConfig writeConfig || return 1
# Add shared folders # Add shared folders
selectPrimaryShare selectPrimaryShare
@@ -278,13 +284,10 @@ selectPrimaryShare
addOptionalShare "2" addOptionalShare "2"
addOptionalShare "3" addOptionalShare "3"
prepareSambaDirs prepareSambaDirs || return 1
startSamba startSamba
case "${NETWORK,,}" in isUserMode && return 0
"passt" | "slirp" )
return 0 ;;
esac
if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then
startNetbios startNetbios