macos
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
Struchkov Mark
2026-01-23 20:18:53 +03:00
parent 0363db559d
commit 74d952edb4
5 changed files with 64 additions and 18 deletions

View File

@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Project Overview ## Project Overview
This is a Docker image for running Samba file server, forked from dperson/samba. It provides an Alpine-based container with current Samba versions and macOS Time Machine support. This is a Docker image for running Samba file server, forked from dperson/samba. It provides an Alpine-based container with current Samba versions and built-in macOS compatibility (including optional Time Machine support).
## Build and Run Commands ## Build and Run Commands
@@ -46,9 +46,23 @@ Configuration can be done via CLI flags or environment variables:
- `-G` / `GENERIC`: Set section-specific smb.conf options - `-G` / `GENERIC`: Set section-specific smb.conf options
- `-n` / `NMBD`: Enable NetBIOS daemon (requires ports 137-138/udp) - `-n` / `NMBD`: Enable NetBIOS daemon (requires ports 137-138/udp)
- `-p` / `PERMISSIONS`: Fix ownership/permissions on shares - `-p` / `PERMISSIONS`: Fix ownership/permissions on shares
- `-t` / `TIMEMACHINE`: Enable Time Machine support (basic macOS compatibility is always enabled)
Multiple shares/users: use numbered env vars (SHARE, SHARE2, SHARE3, etc.) Multiple shares/users: use numbered env vars (SHARE, SHARE2, SHARE3, etc.)
### macOS Compatibility
**Basic macOS compatibility is enabled by default** and includes:
- Extended attributes support (icons, labels, metadata)
- Proper handling of macOS-specific file operations
- Character mapping for special characters
- Automatic cleanup of system files (.DS_Store, .apdisk, etc.)
**Time Machine support** is optional (use `-t` flag or `TIMEMACHINE=1`) and adds:
- Server advertisement as Time Capsule
- Time Machine-specific optimizations
- Automatic backup discovery in macOS
### Exposed Ports ### Exposed Ports
- 137/udp, 138/udp: NetBIOS (only needed with `-n` flag) - 137/udp, 138/udp: NetBIOS (only needed with `-n` flag)

View File

@@ -1,3 +1,4 @@
# https://hub.docker.com/_/alpine
ARG ALPINE_VERSION=3.23 ARG ALPINE_VERSION=3.23
FROM hub.docker.struchkov.dev/alpine:${ALPINE_VERSION} FROM hub.docker.struchkov.dev/alpine:${ALPINE_VERSION}
@@ -44,6 +45,8 @@ RUN file="/etc/samba/smb.conf" && \
aio write size = 1 aio write size = 1
use sendfile = yes use sendfile = yes
getwd cache = yes getwd cache = yes
ea support = yes
mangled names = no
min receivefile size = 16384 min receivefile size = 16384
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
hostname lookups = no hostname lookups = no

View File

@@ -22,7 +22,8 @@ Since 1992, Samba has provided secure, stable, and fast file and print services
- Alpine Linux base image (minimal size) - Alpine Linux base image (minimal size)
- SMB2/SMB3 support (SMB1 disabled by default) - SMB2/SMB3 support (SMB1 disabled by default)
- Time Machine support for macOS - Built-in macOS compatibility (extended attributes, metadata handling)
- Optional Time Machine support
- Built-in recycle bin - Built-in recycle bin
- Optimized performance settings - Optimized performance settings
- Healthcheck for status monitoring - Healthcheck for status monitoring
@@ -79,7 +80,7 @@ docker run -it --rm upagge/samba -h
| `-p` | Set ownership and permissions on shares | | `-p` | Set ownership and permissions on shares |
| `-r` | Disable recycle bin for shares | | `-r` | Disable recycle bin for shares |
| `-S` | Disable SMB2 minimum version | | `-S` | Disable SMB2 minimum version |
| `-t` | Enable Time Machine support for macOS | | `-t` | Enable Time Machine support (macOS compatibility is always enabled) |
| `-s` | Configure a share (see format below) | | `-s` | Configure a share (see format below) |
| `-u` | Add a user (see format below) | | `-u` | Add a user (see format below) |
| `-w "<workgroup>"` | Configure workgroup (domain) | | `-w "<workgroup>"` | Configure workgroup (domain) |
@@ -132,7 +133,7 @@ docker run -it --rm upagge/samba -h
| `RECYCLE` | Disable recycle bin | | `RECYCLE` | Disable recycle bin |
| `SHARE` | Share configuration (supports SHARE2, SHARE3...) | | `SHARE` | Share configuration (supports SHARE2, SHARE3...) |
| `SMB` | Disable SMB2 minimum version | | `SMB` | Disable SMB2 minimum version |
| `TIMEMACHINE` | Enable Time Machine support | | `TIMEMACHINE` | Enable Time Machine support (basic macOS compatibility is always enabled) |
| `TZ` | Timezone (e.g., `Europe/London`) | | `TZ` | Timezone (e.g., `Europe/London`) |
| `USER` | User configuration (supports USER2, USER3...) | | `USER` | User configuration (supports USER2, USER3...) |
| `WIDELINKS` | Allow wide symbolic links | | `WIDELINKS` | Allow wide symbolic links |
@@ -167,6 +168,9 @@ docker run -it -p 139:139 -p 445:445 -d upagge/samba -p \
### Enabling Time Machine ### Enabling Time Machine
> **Note:** Basic macOS compatibility (extended attributes, metadata handling) is **always enabled** by default.
> The `-t` flag adds Time Machine-specific settings for backup discovery.
```bash ```bash
docker run -it -p 139:139 -p 445:445 -d upagge/samba -p -t \ docker run -it -p 139:139 -p 445:445 -d upagge/samba -p -t \
-u "macuser;password" \ -u "macuser;password" \

View File

@@ -22,7 +22,8 @@ Docker-контейнер для файлового сервера Samba.
- Базовый образ Alpine Linux (минимальный размер) - Базовый образ Alpine Linux (минимальный размер)
- Поддержка SMB2/SMB3 (SMB1 отключён по умолчанию) - Поддержка SMB2/SMB3 (SMB1 отключён по умолчанию)
- Поддержка Time Machine для macOS - Встроенная совместимость с macOS (расширенные атрибуты, метаданные)
- Опциональная поддержка Time Machine
- Встроенная корзина (recycle bin) - Встроенная корзина (recycle bin)
- Оптимизированные настройки производительности - Оптимизированные настройки производительности
- Healthcheck для мониторинга состояния - Healthcheck для мониторинга состояния
@@ -79,7 +80,7 @@ docker run -it --rm upagge/samba -h
| `-p` | Установить права владения и доступа на шарах | | `-p` | Установить права владения и доступа на шарах |
| `-r` | Отключить корзину для шар | | `-r` | Отключить корзину для шар |
| `-S` | Отключить минимальную версию SMB2 | | `-S` | Отключить минимальную версию SMB2 |
| `-t` | Включить поддержку Time Machine для macOS | | `-t` | Включить поддержку Time Machine (совместимость с macOS уже включена) |
| `-s` | Настроить шару (см. формат ниже) | | `-s` | Настроить шару (см. формат ниже) |
| `-u` | Добавить пользователя (см. формат ниже) | | `-u` | Добавить пользователя (см. формат ниже) |
| `-w "<workgroup>"` | Настроить рабочую группу (домен) | | `-w "<workgroup>"` | Настроить рабочую группу (домен) |
@@ -132,7 +133,7 @@ docker run -it --rm upagge/samba -h
| `RECYCLE` | Отключить корзину | | `RECYCLE` | Отключить корзину |
| `SHARE` | Настройка шары (поддерживает SHARE2, SHARE3...) | | `SHARE` | Настройка шары (поддерживает SHARE2, SHARE3...) |
| `SMB` | Отключить минимальную версию SMB2 | | `SMB` | Отключить минимальную версию SMB2 |
| `TIMEMACHINE` | Включить поддержку Time Machine | | `TIMEMACHINE` | Включить поддержку Time Machine (базовая совместимость с macOS уже включена) |
| `TZ` | Часовой пояс (например, `Europe/Moscow`) | | `TZ` | Часовой пояс (например, `Europe/Moscow`) |
| `USER` | Настройка пользователя (поддерживает USER2, USER3...) | | `USER` | Настройка пользователя (поддерживает USER2, USER3...) |
| `WIDELINKS` | Разрешить широкие символические ссылки | | `WIDELINKS` | Разрешить широкие символические ссылки |
@@ -164,6 +165,9 @@ docker run -it -p 139:139 -p 445:445 -d upagge/samba -p \
### Включение Time Machine ### Включение Time Machine
> **Примечание:** Базовая совместимость с macOS (расширенные атрибуты, обработка метаданных) **уже включена** по умолчанию.
> Флаг `-t` добавляет специфичные для Time Machine настройки для обнаружения бэкапов.
```bash ```bash
docker run -it -p 139:139 -p 445:445 -d upagge/samba -p -t \ docker run -it -p 139:139 -p 445:445 -d upagge/samba -p -t \
-u "macuser;password" \ -u "macuser;password" \

View File

@@ -247,23 +247,39 @@ workgroup() { local workgroup="$1"
sed -i 's|^\( *workgroup = \).*|\1'"$workgroup"'|' "$SMB_CONF" sed -i 's|^\( *workgroup = \).*|\1'"$workgroup"'|' "$SMB_CONF"
} }
### timemachine: enable Time Machine support for macOS ### macos: enable basic macOS compatibility (always enabled)
# Arguments:
# none)
# Return: result
macos() {
# Add fruit and streams_xattr to vfs objects
sed -i 's/\(vfs objects = catia\)/\1 fruit streams_xattr/' "$SMB_CONF"
# Add basic macOS compatibility configuration
sed -i '/\[global\]/a \
# macOS compatibility settings\
fruit:aapl = yes\
fruit:metadata = stream\
fruit:delete_empty_adfiles = yes\
fruit:veto_appledouble = no\
fruit:wipe_intentionally_left_blank_rfork = yes\
fruit:posix_rename = yes\
fruit:zero_file_id = yes\
fruit:copyfile = yes\
fruit:nfs_aces = no' "$SMB_CONF"
}
### timemachine: enable Time Machine specific settings
# Arguments: # Arguments:
# none) # none)
# Return: result # Return: result
timemachine() { timemachine() {
# Add fruit and streams_xattr to vfs objects # Add Time Machine specific settings
sed -i 's/\(vfs objects = catia\)/\1 fruit streams_xattr/' "$SMB_CONF"
# Add Time Machine configuration
sed -i '/\[global\]/a \ sed -i '/\[global\]/a \
fruit:aapl = yes\ # Time Machine settings\
fruit:metadata = stream\
fruit:model = TimeCapsule6,116\ fruit:model = TimeCapsule6,116\
fruit:delete_empty_adfiles = yes\
fruit:time machine = yes\ fruit:time machine = yes\
fruit:veto_appledouble = no\ spotlight = no' "$SMB_CONF"
fruit:wipe_intentionally_left_blank_rfork = yes' "$SMB_CONF"
} }
### widelinks: allow access wide symbolic links ### widelinks: allow access wide symbolic links
@@ -355,7 +371,9 @@ Options (fields in '[]' are optional, '<>' are required):
-p Set ownership and permissions on the shares -p Set ownership and permissions on the shares
-r Disable recycle bin for shares -r Disable recycle bin for shares
-S Disable SMB2 minimum version -S Disable SMB2 minimum version
-t Enable Time Machine support for macOS -t Enable Time Machine support
NOTE: Basic macOS compatibility is always enabled.
This flag adds Time Machine-specific settings (backup discovery)
-s \"<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]\" -s \"<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]\"
Configure a share Configure a share
required arg: \"<name>;</path>\" required arg: \"<name>;</path>\"
@@ -440,6 +458,9 @@ while read i; do
parse_args "$i"; generic "${PARSED_ARGS[@]}" parse_args "$i"; generic "${PARSED_ARGS[@]}"
done < <(env | awk '/^GENERIC[0-9=_]/ {sub (/^[^=]*=/, "", $0); print}') done < <(env | awk '/^GENERIC[0-9=_]/ {sub (/^[^=]*=/, "", $0); print}')
[[ "${SMB:-""}" ]] && smb [[ "${SMB:-""}" ]] && smb
# Enable basic macOS compatibility by default
macos
# Enable Time Machine only if requested
[[ "${TIMEMACHINE:-""}" ]] && timemachine [[ "${TIMEMACHINE:-""}" ]] && timemachine
while read i; do while read i; do
parse_args "$i"; user "${PARSED_ARGS[@]}" parse_args "$i"; user "${PARSED_ARGS[@]}"