y2r.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #!/bin/bash
  2. #
  3. # The script finds routers with a Yggdrasil IPv6
  4. # and mixes 30% of regular routers with them.
  5. #
  6. # If Yggdrasil < 25 then regular routers 25;
  7. #
  8. # Путь до папки netDb, которая будет скопирована
  9. netdb=/var/lib/i2pd/netDb
  10. # Путь до выходной папки
  11. outdb=/srv/pyseeder/transitoutput
  12. #
  13. ###
  14. temp=/tmp/yggreseed
  15. success=/tmp/yggreseed.success
  16. padding=/tmp/yggreseed.padding
  17. minimum=25 # Минимальное количество роутеров с Ygg
  18. timestart=$(date '+%Y-%m-%d %H:%M:%S')
  19. ###
  20. # Проверка рабочих директорий:
  21. echo -n $netdb...
  22. cd $netdb &> /dev/null
  23. if [[ $? != 0 ]]; then
  24. echo "X"
  25. exit 1
  26. else
  27. echo "OK"
  28. fi
  29. ls
  30. echo -n $outdb...
  31. cd $outdb &> /dev/null
  32. if [[ $? != 0 ]]; then
  33. echo "X"
  34. exit 2
  35. else
  36. echo "OK"
  37. fi
  38. ls
  39. # Очистка выходной директории
  40. echo "Clearing the output directory..."
  41. rm -r $outdb/* &> /dev/null
  42. maketemp () { # Создание временной папки первичной сортировки
  43. echo "Creating temp directory..."
  44. rm -r $temp &> /dev/null
  45. mkdir $temp &> /dev/null
  46. if [[ $? != 0 ]]; then
  47. echo "Error. Exiting."
  48. exit 3
  49. fi
  50. }
  51. maketemp
  52. copy () { # Копирование базы роутера в первичную временную папку
  53. echo "Copying the router base to the temp directory..."
  54. cp -r $netdb/* $temp/ &> /dev/null
  55. if [[ $? != 0 ]]; then
  56. echo "Error. Exiting."
  57. exit 4
  58. fi
  59. }
  60. copy
  61. # Main section
  62. echo "Finding the Yggdrasil routers:"
  63. cd $temp
  64. yggaddr=0
  65. count=1
  66. for((;;)); do # Поиск Yggdrasil-роутеров и их копирование в выходную директорию
  67. dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
  68. if [[ $? != 0 ]]; then
  69. break
  70. fi
  71. cd $dir
  72. for((;;)); do
  73. dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
  74. if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
  75. cd $temp
  76. rmdir $dir
  77. break
  78. fi
  79. echo -n "[$count] "
  80. echo -n "$dat ["
  81. cat $dat | grep '=.[23]..:' &> /dev/null # Поиск host=200: или host=300:
  82. if [[ $? == 0 ]]; then # Успех, забираем
  83. echo "+]"
  84. let yggaddr++
  85. mkdir $outdb/$dir &> /dev/null
  86. mv ./$dat $outdb/$dir
  87. echo $dat >> $success
  88. else # Не успех, удаляем
  89. echo ".]"
  90. rm ./$dat
  91. fi
  92. let count++
  93. done
  94. done
  95. echo -e "\n================================================= YGGDRASIL *"
  96. cat $success
  97. rm $success
  98. echo -e "==========================================================="
  99. echo -e "Reseed building..."
  100. echo -n "Need "
  101. if [[ $yggaddr < $minimum ]]; then # Если ygg-роутеров меньше minimum, докладываем 25 обычных роутеров
  102. echo -n "25 "
  103. paddingcount=25
  104. else
  105. paddingcount=$(($yggaddr / 10 * 3))
  106. echo -n "$paddingcount "
  107. fi
  108. echo "regular routers"
  109. cd $temp
  110. maketemp
  111. copy
  112. echo -n "Padding status: "
  113. realpadding=0
  114. for((i=0; $i < $paddingcount; i++)); do
  115. rand=$(( $RANDOM % 10 ))
  116. for((j=0;$j!=$rand;j++)); do
  117. cd $temp
  118. dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
  119. if [[ $? != 0 ]]; then
  120. echo "Dir error! PADDING-RAND-FOR"
  121. exit 5
  122. fi
  123. cd $dir
  124. dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
  125. if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
  126. cd $temp
  127. rmdir $dir
  128. else
  129. rm ./$dat
  130. fi
  131. cd $temp
  132. done
  133. padselect () { # Дополнение ресида случайными роутерами
  134. cd $temp
  135. dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
  136. if [[ $? != 0 ]]; then
  137. echo "."
  138. padselect
  139. fi
  140. cd $dir
  141. dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
  142. if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
  143. cd $temp
  144. rmdir $dir
  145. padselect
  146. fi
  147. }
  148. padselect
  149. mkdir $outdb/$dir &> /dev/null
  150. mv ./$dat $outdb/$dir
  151. echo $dat >> $padding
  152. let realpadding++
  153. echo -n "*"
  154. done
  155. echo -e "\n=================================================== PADDING *"
  156. cat $padding
  157. rm $padding
  158. echo -e "==========================================================="
  159. echo -e "\nstarted: $timestart\nfinished: $(date '+%Y-%m-%d %H:%M:%S')"
  160. echo -e "total routers: $count"
  161. echo -e "reseed build: $(($yggaddr+$realpadding)) ($yggaddr/$realpadding)\n"
  162. echo -e "Yggdrasil I2P reseed creator (c) GPLv3, acetone, 2021\n"
  163. # Update web page
  164. sed -i "s/>[0-9]\{1,1000\}</>$yggaddr</" /srv/pyseeder/output/seed.html
  165. echo "Web page updated"