123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #!/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 [[ $yggaddr < $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 (c) GPLv3, acetone, 2021\n"
- # Update web page
- sed -i "s/>[0-9]\{1,1000\}</>$yggaddr</" /srv/pyseeder/output/seed.html
- echo "Web page updated"
|