montage et démontage des scè...
|
1 |
#!/bin/zsh |
2 | ||
3 |
terrafs_d=${1:-$HOME/.fgfs/terrafs.d} |
|
4 | ||
5 |
typeset -A osm2city_urls=( |
|
6 |
cdn.merspieler.tk o2c |
|
7 |
ukmirror.flightgear.org osm2city |
|
8 |
) |
|
9 | ||
10 |
typeset -A ws20_urls=( |
|
11 |
cdn.merspieler.tk ts |
|
12 |
ukmirror.flightgear.org fgscenery |
|
13 |
flightgear.sourceforge.net scenery |
|
14 |
) |
|
15 | ||
16 |
osm2city_dirs=( |
|
17 |
Buildings |
|
18 |
Details |
|
19 |
Pylons |
|
20 |
Roads |
|
21 |
Trees |
|
22 |
) |
|
23 | ||
24 |
ws20_dirs=( |
|
25 |
Airports |
|
26 |
Models |
|
27 |
Objects |
|
28 |
Terrain |
|
29 |
) |
|
30 | ||
31 |
get_url () { |
|
32 |
eval "local hosts=(\${(k)${1}_urls[@]})" |
|
33 |
echo ${hosts[$(( $RANDOM % ${#hosts[@]} + 1 ))]} |
|
34 |
} |
|
35 | ||
36 |
remove_url () { |
|
37 |
eval "unset \"${1}_urls[$2]\"" |
|
38 |
} |
|
39 | ||
40 |
get_largest () { |
|
41 |
eval "local _1=\${#${1}_urls[@]}" |
|
42 |
eval "local _2=\${#${2}_urls[@]}" |
|
43 |
if test $_1 -gt $_2; then |
|
44 |
echo largest=$1 |
|
45 |
echo smallest=$2 |
|
46 |
else |
|
47 |
echo largest=$1 |
|
48 |
echo smallest=$2 |
|
49 |
fi |
|
50 |
} |
|
51 | ||
52 |
mount_dirs () { |
|
53 |
local dir= |
|
54 |
eval "local oserver=https://\${${1}_url}/\${${1}_urls[\${${1}_url}]}" |
|
55 |
eval "local dirs=(\${${1}_dirs[@]})" |
|
56 |
for dir in ${dirs[@]}; do |
|
57 |
mkdir -p $HOME/.fgfs/terrafs.d/$dir |
|
58 |
printf "- %-10s " $dir && $HOME/.fgfs/terrafs -oserver=$oserver/$dir $terrafs_d/$dir && echo "ok" || echo "ERROR" |
|
59 |
done |
|
60 |
} |
|
61 | ||
62 |
eval $(get_largest ws20 osm2city) |
|
63 | ||
64 |
if test $(grep -Ec "^terrafs +$terrafs_d" /proc/mounts) -ne $(( ${#ws20_dirs[@]} + ${#osm2city_dirs[@]} )); then |
|
65 |
eval "${largest}_url=$(get_url $largest)" |
|
66 |
eval "remove_url $smallest \$${largest}_url" |
|
67 |
eval "${smallest}_url=$(get_url $smallest)" |
|
68 | ||
69 |
for m in ws20 osm2city; do |
|
70 |
eval "printf 'montage %s depuis %s\n' ${(U)m} \$${m}_url" |
|
71 |
mount_dirs $m |
|
72 |
done |
|
73 |
else |
|
74 |
echo "démontage $terrafs_d" |
|
75 |
for dir in ${osm2city_dirs[@]} ${ws20_dirs[@]}; do |
|
76 |
printf "- %-10s " $dir && fusermount -u $terrafs_d/$dir && echo "ok" || echo "ERROR" |
|
77 |
done |
|
78 |
fi |