Create TOC

2020년 11월 18일

Debian/rclone + autofs

rclone mount을 autofs에 적용하는 방법을 기술한다.

rclone 으로 myremote remote 설정을 추가했다고 가정한다.

설치

$ sudo apt install autofs fuse3

rclonefs

rclone mount helper 스크립트는 한글 locale 에서 제대로 동작하지 않는다. 아래와 같이 수정해서 /usr/local/bin/rclonefs로 저장한다.

#!/bin/bash
remote=$1
mountpoint=$2
shift 2

# Process -o parameters
while getopts :o: opts; do
	case $opts in
		o)
			params=${OPTARG//,/ }
			for param in $params; do
				if [ "$param" == "rw"   ]; then continue; fi
				if [ "$param" == "ro"   ]; then continue; fi
				if [ "$param" == "dev"  ]; then continue; fi
				if [ "$param" == "suid" ]; then continue; fi
				if [ "$param" == "exec" ]; then continue; fi
				if [ "$param" == "auto" ]; then continue; fi
				if [ "$param" == "nodev" ]; then continue; fi
				if [ "$param" == "nosuid" ]; then continue; fi
				if [ "$param" == "noexec" ]; then continue; fi
				if [ "$param" == "noauto" ]; then continue; fi
				if [[ $param == x-systemd.* ]]; then continue; fi
				trans="$trans --$param"
			done
			;;
		\?)
			echo "Invalid option: -$OPTARG"
			;;
	esac
done

# exec rclone
trans="$trans $remote $mountpoint"
# NOTE: do not try "mount --daemon" here, it does not play well with systemd automount, use '&'!
# NOTE: mount is suid and ignores pre-set PATHs -> specify explicitely
PATH=$PATH rclone mount $trans /dev/null 2>/dev/null &

# WARNING: this will loop forever if remote is actually empty!
until [ "`LANG=C \ls -l $mountpoint`" != 'total 0' ]; do
	sleep 1
done

저장 후 실행 권한을 준다.

$ sudo chmod +x /usr/local/bin/rclonefs

autofs 설정

cloud.autofs

아래 내용으로 /etc/auto.master.d/cloud.autofs파일을 만든다.

/cloud	/etc/auto.master.d/auto.rclone

auto.rclone

아래 내용을 참고로 /etc/auto.master.d/auto.rclone 파일을 만든다.

myremotedrive	-fstype=fuse.rclonefs,config=/home/$USER/.config/rclone/rclone.conf,allow-other,uid=$UID	:myremote:

설정 적용

autofs를 다시 시작한다.

$ sudo systemctl restart autofs.service

테스트

아래 명령으로 myremote 내용이 잘보이는지 확인해본다.

$ ls /cloud/myremotedrive