はわわーっ

はわわわわっ

dockerでsambaを動かしてみる

やってみた。

Dockerfile

FROM ubuntu:trusty
RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN rm -f /etc/apt/sources.list && \
    echo 'deb http://jp.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb http://jp.archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb http://jp.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse' >> /etc/apt/sources.list
RUN apt-get update -y && apt-get dist-upgrade -fy
RUN apt-get install -fy samba
RUN apt-get clean
RUN useradd -m -d /var/samba meu
RUN echo meu:meu | chpasswd
RUN printf 'meu\nmeu\n' | pdbedit -a meu -t
COPY smb.conf /etc/samba/smb.conf

smb.conf

[global]
workgroup = WORKGROUP
dos charset = CP932
unix charset = UTF-8
server string = %h server
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
server role = standalone server
map to guest = never
usershare allow guests = no
disable netbios = yes

[homes]
browseable = no
read only = no
valid users = %S
create mask = 0644
directory mask = 0755

fig.yml

samba:
  build: .
  command: /bin/sh -c "/bin/chown meu:meu /var/samba && /usr/sbin/smbd -F"
  ports:
    - 139:139
    - 445:445
  volumes:
    - /var/samba

dockerでボリュームをマウントすると元の権限に関係なく所有者がrootになってしまうのでsmbd起動前に変更する。

Fixes permissions on volumes when dir in container is empty by cpuguy83 · Pull Request #5136 · docker/docker · GitHub
これでfixしてるっぽいんだけど直ってないらしい。

あと、ファイルの改行コードがなんかおかしい。

linuxローカルだと

$ echo aaa > aaa.txt
$ cat aaa.txt | hexdump -C
00000000  61 61 61 0a                                       |aaa.|
00000004

こうなってて、改行コードは0aでLFになってる。

コンテナの中で同じことをすると

$ docker exec -it samba_samba_1 sh -c 'echo aaa > /var/samba/aaa.txt'
$ docker exec -it samba_samba_1 cat /var/samba/aaa.txt | hexdump -C
00000000  61 61 61 0d 0a                                    |aaa..|
00000005

こうなって、改行コードが0d 0aでCR LFになる。
どこかで変換されてるらしい。

windowsからアクセスして同じようにファイルを作ったときは

$ docker exec -it samba_samba_1 cat /var/samba/aaa.txt | hexdump -C
00000000  61 61 61 0d 0d 0a                                 |aaa...|
00000006

こうなって、改行コードが0d 0d 0aでCR CR LFになる。

どこかでLFをCRLFに勝手に変換してるっぽく見えるんだけど何が原因なんだろう。