126 lines
2.6 KiB
Plaintext
126 lines
2.6 KiB
Plaintext
mount_storage()
|
|
{
|
|
echo "* Probing storage..."
|
|
|
|
bdev="$1"
|
|
if ! [ -b "$bdev" ]; then
|
|
echo "* Device $bdev does not exist."
|
|
return 1
|
|
fi
|
|
|
|
mount -o rw,relatime "$bdev" "$cfg_lauv_storage_dir" 2> /dev/null
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "* Failed to mount $bdev on $cfg_lauv_storage_dir"
|
|
return 1
|
|
fi
|
|
|
|
echo "* Mounted '$bdev' on '$cfg_lauv_storage_dir'"
|
|
return 0
|
|
}
|
|
|
|
try_mount_storage()
|
|
{
|
|
n=0; while [ $n -lt 30 ]; do
|
|
mount_storage "$1"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
return 0
|
|
fi
|
|
|
|
sleep 1
|
|
let n++
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
start_nfs_server()
|
|
{
|
|
echo "* Creating NFS administrative folder..."
|
|
mkdir -p /var/lib/nfs
|
|
if ! [ -d /var/lib/nfs ]; then
|
|
echo "ERROR: failed to create data folder."
|
|
return 1
|
|
fi
|
|
|
|
echo "* Launching rpcbind..."
|
|
/usr/bin/rpcbind
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to start rpcbind."
|
|
return 1
|
|
fi
|
|
|
|
echo "* Launching rpc.statd..."
|
|
/usr/bin/rpc.statd
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to start rpc.statd."
|
|
return 1
|
|
fi
|
|
|
|
echo "* Launching rpc.nfsd..."
|
|
/usr/bin/rpc.nfsd
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to start rpc.nfsd."
|
|
return 1
|
|
fi
|
|
|
|
echo "* Creating NFS filesystem table..."
|
|
/usr/bin/exportfs -ra
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to create filesystem table."
|
|
return 1
|
|
fi
|
|
|
|
echo "* Launching rpc.mountd..."
|
|
/usr/bin/rpc.mountd
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to start rpc.mountd."
|
|
return 1
|
|
fi
|
|
|
|
echo "* Exporting NFS filesystems..."
|
|
/usr/bin/exportfs \
|
|
-o rw,async,no_root_squash,no_subtree_check \
|
|
10.0.0.0/16:"$cfg_lauv_storage_dir"
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: failed to export filesystems."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
stop_nfs_server()
|
|
{
|
|
echo "* Unexporting NFS filesystems..."
|
|
exportfs -au
|
|
echo "* Terminating rpc.mountd..."
|
|
killall rpc.mountd 2> /dev/null
|
|
echo "* Terminating rpc.statd..."
|
|
killall rpc.statd 2> /dev/null
|
|
echo "* Terminating rpc.bind..."
|
|
killall rpcbind 2> /dev/null
|
|
}
|
|
|
|
start()
|
|
{
|
|
mkdir -p "$cfg_lauv_storage_dir"
|
|
|
|
# Removable storage.
|
|
if [ "$cfg_lauv_storage" != "internal" ]; then
|
|
try_mount_storage /dev/sda1
|
|
fi
|
|
|
|
# FIXME: what to do if the above fails.
|
|
start_nfs_server
|
|
}
|
|
|
|
stop()
|
|
{
|
|
stop_nfs_server
|
|
|
|
if [ "$cfg_lauv_storage" != "internal" ]; then
|
|
echo "* Unmounting storage..."
|
|
umount "$cfg_lauv_storage_dir"
|
|
fi
|
|
}
|