Como posso regenerar os links simbólicos do System V?

5

Eu apaguei acidentalmente todos os links simbólicos em /etc/rc1.d/ . Como posso regenerá-los?

    
por ændrük 14.06.2011 / 05:22

1 resposta

6

A maneira mais confiável de recuperar os links simbólicos seria reinstalar os pacotes que possuem um script de inicialização.

Eu notei que nem dpkg-reconfigure nem apt-get --reinstall install restaura os links simbólicos. Nem todos os scripts estão em conformidade com os padrões LSB e não fornecem uma linha # Default-(Start|Stop) .

O script abaixo (testado) procura no script de pós-instalação de pacotes o comando update-rc.d , que adiciona o script de inicialização. Os links anteriores precisavam ser excluídos para funcionar, portanto, a linha update-rc.d -f [script-name] remove . Verifiquei que todos os links foram colocados corretamente, o único arquivo ausente foi um arquivo README , mas isso não é crítico.

#!/bin/bash
cd /etc/init.d && for file in *; do
    if [ -x "$file" ]; then
        pkg=$(dpkg-query -S "/etc/init.d/$file" | cut -d: -f1)
        if [ -z "$pkg" ]; then
            echo "**WARNING** No related package found, skipping file: $file"
        else
            postinst="/var/lib/dpkg/info/$pkg.postinst"
            if [ -r "$postinst" ]; then
                update=$(grep -Po "(?<!#)\s*update-rc\.d\s+$file\s+((start|stop|defaults)[\s\dS\.]+)+" "$postinst" | sed -e 's/^\s*//' -e 's/\s\+/ /g')
                if [ -n "$update" ]; then
                    sudo update-rc.d -f "$file" remove
                    sudo $update
                else
                    if [ -e "/etc/init/$file.conf" ]; then
                        echo "$file has been moved to Upstart"
                    else
                        echo "No update-rc.d line found for $file"
                    fi
                fi
            else
                echo "No post-installation script found for $pkg"
            fi
        fi
    else
        echo "Not an executable, ignoring file: $file"
    fi
done

Se você quiser repará-lo manualmente, use o seguinte:

  • dpkg-query -S /etc/init.d/[script-name] - recupera o nome do pacote responsável pelo arquivo
  • less /var/lib/dpkg/info/[package-name].postinst - procure por "update-rc.d" para obter o comando necessário para instalar os scripts de inicialização

Recursos:

  • Página de manual de update-rc.d
por Lekensteyn 14.06.2011 / 10:31

Tags