Quagga перестала работать после обновлений в Stretch

Давай, не сдавайся awk так быстро!

awk 'NR == FNR {
          aMatch[NR]=$0
          n=FNR
          next;
    }
    {
          RS="\n( |\t)*\n"
          for(i=1; i<n+1; i++) {
             if($0 ~ aMatch[i]) {
               print
               printf "\n"
               break                   
             }                 
          }
    }' matchFile myFile | head -n-1

Возможно, вы захотите поместить это в сценарий:

awk -f myscript.awk matchFile myFile | head -n-1

Решение в форме сценария awk с аннотациями о том, что он делает:

# This block's instructions will only be executed for the first file (containing the lines to be matched)
# NR = number of line read, and FNR = number of line read in current file   
# So the predicate NR == FNR is only true when reading the first file !
NR == FNR {
   aMatch[NR]=$0          # Store the line to match in an array
   n=FNR                  # Store the number of matches
   next;                  # Tells awk to skip further instructions (they are intended for the other file) and process the next record
}
# We are now processing the second file (containing the paragraphs)
{
   RS="\n( |\t)*\n"          # Set record separator to a blank line. Instead of a single line, a record is now the entire paragraph
   for(i=1; i<n+1; i++) {    # Loop on all possible matches
      if($0 ~ aMatch[i]) {   # If $0 (the whole record i.e. paragraph) matches a line we read in file 1 then
         print               # Print the record (i.e. current paragraph)
         printf "\n"         # Print a new line to separate them. However we will end up with a trailing newline, hence the pipe to head -n-1 to get rid of it.
         break               # We need to break out of the loop otherwise paragraphs with n matches will be printed n times
      }                      # End of loop on matches
   }                         # End of 2nd file processing
}
2
23.01.2018, 15:57
1 ответ

Очевидно, пакеты quagga претерпели изменения, и они больше не поддерживают SysVinit.

Пропали несколько файлов, в том числе /etc/init.d/quagga и / etc / quagga / daemons . Бинарный файл watchquagga тоже больше не устанавливается.

Временным быстрым исправлением может быть деинсталляция всех пакетов quagga и установка пакета jessie .

Шаги следующие:

dpkg --purge `dpkg -l | grep quagga | awk ' { print $2 } ' `

Получение пакета из репозиториев Jessie: с packages.debian.org (jessie quagga)

wget http://security.debian.org/debian-security/pool/updates/main/q/quagga/quagga_0.99.23.1-1+deb8u3_amd64.deb
dpkg -i quagga_0.99.23.1-1+deb8u3_amd64.deb 

Активируйте зебру (маршрутизацию) и демон OSPF:

vi /etc/quagga/daemons
zebra=y
ospfd=y

И запустите службу Quagga:

/etc/init.d/quagga start

@derobert также наиболее удобно указал на наличие архива моментальных снимков последних версий по адресу http://snapshot.debian.org/package/quagga

Однако, поскольку это исправление безопасности, я советую поддерживать Jessie deb и использовать позже 1.1.0-1, чтобы создать основу для моего собственного deb в моем локальном репозитории.

Я зарегистрировал ошибку # 849011 в команде разработчиков Debian quagga только для того, чтобы мне сказали «переходите на systemd» от сопровождающих пакета.

Я перенесу демон маршрутизатора на BIRD или свои системы DNS на FreeBSD, так как для меня это неприемлемое решение.

PS Со временем я перешел на BIRD. см. OSPF: миграция Quagga на BIRD

PPS Как @MatijaNalis указывает в комментариях, ошибка, которую я зарегистрировал в результате этого вопроса, была открыта в течение почти 1,5 лет и была решена только в Buster .Таким образом, при выполнении динамической сетевой конфигурации в Debian Stretch с использованием SysV , чтобы использовать BIRD вместо Quagga, это еще менее дестабилизирует систему.

Кроме того, хотя BIRD не обеспечивает небольшую эмуляцию консоли командной строки Cisco, как Quagga, она имеет более элегантный дизайн и позволяет использовать несколько идентификаторов / экземпляров маршрутизации.

2
27.01.2020, 22:10

Теги

Похожие вопросы