|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# The script finds routers with a Yggdrasil IPv6
|
|
|
|
# and mixes 30% of regular routers with them.
|
|
|
|
#
|
|
|
|
# If Yggdrasil < 25 then regular routers 25;
|
|
|
|
#
|
|
|
|
# Путь до папки netDb, которая будет скопирована
|
|
|
|
netdb=/var/lib/i2pd/netDb
|
|
|
|
# Путь до выходной папки
|
|
|
|
outdb=/srv/pyseeder/transitoutput
|
|
|
|
#
|
|
|
|
###
|
|
|
|
temp=/tmp/yggreseed
|
|
|
|
success=/tmp/yggreseed.success
|
|
|
|
padding=/tmp/yggreseed.padding
|
|
|
|
minimum=25 # Минимальное количество роутеров с Ygg
|
|
|
|
timestart=$(date '+%Y-%m-%d %H:%M:%S')
|
|
|
|
###
|
|
|
|
|
|
|
|
# Проверка рабочих директорий:
|
|
|
|
echo -n $netdb...
|
|
|
|
cd $netdb &> /dev/null
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "X"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
echo "OK"
|
|
|
|
fi
|
|
|
|
ls
|
|
|
|
|
|
|
|
echo -n $outdb...
|
|
|
|
cd $outdb &> /dev/null
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "X"
|
|
|
|
exit 2
|
|
|
|
else
|
|
|
|
echo "OK"
|
|
|
|
fi
|
|
|
|
ls
|
|
|
|
|
|
|
|
# Очистка выходной директории
|
|
|
|
echo "Clearing the output directory..."
|
|
|
|
rm -r $outdb/* &> /dev/null
|
|
|
|
|
|
|
|
maketemp () { # Создание временной папки первичной сортировки
|
|
|
|
echo "Creating temp directory..."
|
|
|
|
rm -r $temp &> /dev/null
|
|
|
|
mkdir $temp &> /dev/null
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "Error. Exiting."
|
|
|
|
exit 3
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
maketemp
|
|
|
|
|
|
|
|
copy () { # Копирование базы роутера в первичную временную папку
|
|
|
|
echo "Copying the router base to the temp directory..."
|
|
|
|
cp -r $netdb/* $temp/ &> /dev/null
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "Error. Exiting."
|
|
|
|
exit 4
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
copy
|
|
|
|
|
|
|
|
# Main section
|
|
|
|
|
|
|
|
echo "Finding the Yggdrasil routers:"
|
|
|
|
cd $temp
|
|
|
|
yggaddr=0
|
|
|
|
count=1
|
|
|
|
|
|
|
|
for((;;)); do # Поиск Yggdrasil-роутеров и их копирование в выходную директорию
|
|
|
|
dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
|
|
|
|
cd $dir
|
|
|
|
for((;;)); do
|
|
|
|
dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
|
|
|
|
if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
|
|
|
|
cd $temp
|
|
|
|
rmdir $dir
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo -n "[$count] "
|
|
|
|
echo -n "$dat ["
|
|
|
|
cat $dat | grep '=.[23]..:' &> /dev/null # Поиск host=200: или host=300:
|
|
|
|
|
|
|
|
if [[ $? == 0 ]]; then # Успех, забираем
|
|
|
|
echo "+]"
|
|
|
|
let yggaddr++
|
|
|
|
mkdir $outdb/$dir &> /dev/null
|
|
|
|
mv ./$dat $outdb/$dir
|
|
|
|
echo $dat >> $success
|
|
|
|
else # Не успех, удаляем
|
|
|
|
echo ".]"
|
|
|
|
rm ./$dat
|
|
|
|
fi
|
|
|
|
let count++
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
echo -e "\n================================================= YGGDRASIL *"
|
|
|
|
cat $success
|
|
|
|
rm $success
|
|
|
|
echo -e "==========================================================="
|
|
|
|
|
|
|
|
echo -e "Reseed building..."
|
|
|
|
echo -n "Need "
|
|
|
|
if [[ $yggvolume < $minimum ]]; then # Если ygg-роутеров меньше minimum, докладываем 25 обычных роутеров
|
|
|
|
echo -n "25 "
|
|
|
|
paddingcount=25
|
|
|
|
else
|
|
|
|
paddingcount=$(($yggaddr / 10 * 3))
|
|
|
|
echo -n "$paddingcount "
|
|
|
|
fi
|
|
|
|
echo "regular routers"
|
|
|
|
|
|
|
|
cd $temp
|
|
|
|
maketemp
|
|
|
|
copy
|
|
|
|
echo -n "Padding status: "
|
|
|
|
realpadding=0
|
|
|
|
for((i=0; $i < $paddingcount; i++)); do
|
|
|
|
|
|
|
|
rand=$(( $RANDOM % 10 ))
|
|
|
|
for((j=0;$j!=$rand;j++)); do
|
|
|
|
cd $temp
|
|
|
|
dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "Dir error! PADDING-RAND-FOR"
|
|
|
|
exit 5
|
|
|
|
fi
|
|
|
|
cd $dir
|
|
|
|
dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
|
|
|
|
if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
|
|
|
|
cd $temp
|
|
|
|
rmdir $dir
|
|
|
|
else
|
|
|
|
rm ./$dat
|
|
|
|
fi
|
|
|
|
cd $temp
|
|
|
|
done
|
|
|
|
|
|
|
|
padselect () { # Дополнение ресида случайными роутерами
|
|
|
|
cd $temp
|
|
|
|
dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
|
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "."
|
|
|
|
padselect
|
|
|
|
fi
|
|
|
|
cd $dir
|
|
|
|
dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
|
|
|
|
if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
|
|
|
|
cd $temp
|
|
|
|
rmdir $dir
|
|
|
|
padselect
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
padselect
|
|
|
|
|
|
|
|
mkdir $outdb/$dir &> /dev/null
|
|
|
|
mv ./$dat $outdb/$dir
|
|
|
|
echo $dat >> $padding
|
|
|
|
let realpadding++
|
|
|
|
echo -n "*"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo -e "\n=================================================== PADDING *"
|
|
|
|
cat $padding
|
|
|
|
rm $padding
|
|
|
|
echo -e "==========================================================="
|
|
|
|
echo -e "\nstarted: $timestart\nfinished: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
|
|
echo -e "total routers: $count"
|
|
|
|
echo -e "reseed build: $(($yggaddr+$realpadding)) ($yggaddr/$realpadding)\n"
|
|
|
|
echo -e "Yggdrasil I2P reseed creator | acetone, 2021\n"
|
|
|
|
|
|
|
|
# Update web page
|
|
|
|
|
|
|
|
sed -i "s/>[0-9]\{1,1000\}</>$yggaddr</" /srv/pyseeder/output/seed.html
|
|
|
|
echo "Web page updated"
|