Blog Comments

  1. pbojczuk's Avatar
    Nie wiem jeszcze jaki jest best practice, by po każdym rebucie hosta wybrane urządzenia PCI mogły być przypisane do wiemek.

    Póki co poradziłem sobie tak:

    /usr/local/bin/passQaudNicCard.sh

    Code:
    #!/bin/sh
    
    # a script to allow passing four NICs of the quad network card to Xen hosts
    # created, 11/04/2022
    
    #   +-1d.0-[02-05]----00.0-[03-05]--+-02.0-[04]--+-00.0  Intel Corporation 82576 Gigabit Network Connection
    #   |                               |            \-00.1  Intel Corporation 82576 Gigabit Network Connection
    #   |                               \-04.0-[05]--+-00.0  Intel Corporation 82576 Gigabit Network Connection
    #   |                                            \-00.1  Intel Corporation 82576 Gigabit Network Connection
    
    PCIDEVLIST="
        04:00.0
        04:00.1
        05:00.0
        05:00.1
    "
    
    for i in $PCIDEVLIST; do
        xl pci-assignable-add $i
    done
    /etc/systemd/system/pass-quad-nic-card.service
    Code:
    [Unit]
    Description=a service to allow passing quad nic card to Xen vms
    
    [Service]
    ExecStart=/usr/local/bin/passQaudNicCard.sh
    
    [Install]
    WantedBy=multi-user.target
    I po restarcie hosta zwraca mi:


    więc póki co może być.
  2. pbojczuk's Avatar
    Rozwiązywanie URL
    Wymyśliłem coś takiego:
    Code:
    REDIRECT0="https://sourceforge.net/projects/systemrescuecd/files/latest/download"
    REDIRECT1="$(curl -ks ${REDIRECT0} | grep https | sed -e 's/.*<a href="//' -e 's/">.*//')"
    REDIRECT2="$(curl -ks ${REDIRECT1} | grep https | sed -e 's/.*<a href="//' -e 's/">.*//')"
    Wadą tego rozwiązania jest to, że dość niezgrabnie można tutaj przechycić kod wyjścia, więc ostatecznie tego nie robię.
    No to
    Code:
    _getRedirect () {
            curl -ks $1 | grep https | sed -e 's/.*<a href="//' -e 's/">.*//'
    }
    wrzucenie curl do funkcji jest ciekawym rozwiązaniem, które może pozwolić podejść do przechwycenia kodów wyjścia z tegoż curl, Tyle, że jeżeli strona się wyświetli poprawnie, a jej zawartość się zmieni, to i tak otrzymam z curl zero na wyjściu. Natomiast poniższy test daje mi to, czego chcę: jeżeli nie znajdę oczekiwanego regexpa w nazwie pliku, oznacza to, że ponownie muszę przeanalizować zwrotkę z pierwszego przekierowania, czyli z $REDIRECT0, a sam skrypt mogę zakończyć błędem. I takie podejście wyraziłem w ten sposób:

    Code:
    REDIRECT0="https://sourceforge.net/projects/systemrescuecd/files/latest/download"
    
    _getRedirect () {
            RED="$(curl -ks $1 | grep https | sed -e 's/.*<a href=\"//' -e 's/\">.*//')"
            echo ${RED} | grep "systemrescue-.*-amd64.iso" || echo "Expected filename not recognized."
    }
    
    REDIRECT1="$(_getRedirect ${REDIRECT0})"
    REDIRECT2="$(_getRedirect ${REDIRECT1})"
    FILENAME="$(echo ${REDIRECT2} | sed 's/.*\///')"
  3. pbojczuk's Avatar
    Code:
    $RPMS | ForEach {
      rpm -q --queryformat "%{NAME}\n" $_ | out-null
      $? ? $INSRPMS.Add($_) : $MISRPMS.Add($_)
    }
    Przecież w Bashu też tak można, o czym zapomniałem skupiając się właśnie na poprawnym zbudowaniu i obsłużeniu tablicy:
    Code:
    for i in ${RPMS[@]}; do
      rpm -q --queryformat "%{NAME}\n" ${i} &> /dev/null
      [ $? -eq 0 ] && INSRPMS=(${INSRPMS[@]} $i) || MISRPMS=(${MISRPMS[@]} $i)
    done