#!/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