O Bash foi sobrescrito. Usando Dash, o apt-get --reinstall install bash retorna um erro

3

Então, eu inventei /bin/bash com um script idiota por acidente. Minha pergunta anterior pode ser encontrada abaixo. Foi recomendado que eu crie um novo para lidar com um problema que surgiu. Para recapitular, consegui usar a GUI para alterar meu terminal padrão para traço, onde posso executar comandos. Agora, estou tentando reinstalar o bash para que eu possa alterar meu terminal padrão de volta. Como dito anteriormente, estou executando apt-get --reinstall install bash, que deve ser reinstalado. No entanto, ele retorna um erro:

    reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  bash-completion
Suggested packages:
  bash-doc
The following packages will be upgraded:
  bash bash-completion
2 upgraded, 0 newly installed, 0 to remove and 2128 not upgraded.
2 not fully installed or removed.
Need to get 0 B/1,605 kB of archives.
After this operation, 673 kB of additional disk space will be used.
Do you want to continue? [Y/n] (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 307792 files and directories currently installed.)
Preparing to unpack .../archives/bash_4.4-5_amd64.deb ...
dpkg (subprocess): unable to execute old pre-removal script (/var/lib/dpkg/info/bash.prerm): No such file or directory
dpkg: warning: subprocess old pre-removal script returned error exit status 2
dpkg: trying script from the new package instead ...
dpkg (subprocess): unable to execute new pre-removal script (/var/lib/dpkg/tmp.ci/prerm): No such file or directory
dpkg: error processing archive /var/cache/apt/archives/bash_4.4-5_amd64.deb (--unpack):
 subprocess new pre-removal script returned error exit status 2
dpkg (subprocess): unable to execute installed post-installation script (/var/lib/dpkg/info/bash.postinst): No such file or directory
dpkg: error while cleaning up:
 subprocess installed post-installation script returned error exit status 2
Errors were encountered while processing:
 /var/cache/apt/archives/bash_4.4-5_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Além disso, dpkg --configure bash diz que houve um erro no processamento do pacote e que o bash está "em um estado inconsistente muito ruim; você deve reinstalá-lo antes de tentar a configuração".

A distribuição que eu estou executando é Kali 2.2 rolando, e eu já sei que vou ter muito ódio por isso, porque se alguma coisa, sobrescrevendo bash é um erro.

Nova postagem, conforme recomendado por @Philippos. Link para post antigo é aqui

    
por GarrukApex 22.10.2017 / 02:17

1 resposta

11

O problema é que o script bash usa o bash para que ele não seja executado, fazendo com que a reinstalação inteira falhe.

Existem várias maneiras de contornar isso:

1) O bash prerm script em meus sistemas (Debian unstable & Debian stable) é incrivelmente simples e não precisa de bash para rodar. Portanto, basta editar /var/lib/dpkg/info/bash.prerm e alterar a primeira linha de #! /bin/bash para #! /bin/sh . Certifique-se também de que /bin/sh não esteja apontando para bash ( ls -l /bin/sh ). Se estiver, é provável que você tenha /bin/dash instalado, portanto, tente editar o arquivo prerm para usá-lo.

2) Exclua o arquivo prerm e reinstale-o. O arquivo prerm não faz nada importante na versão 4.4-5 no Debian, então você pode se livrar do arquivo prerm e tentar reinstalar.

3) Você pode extrair /bin/bash do arquivo .deb já baixado. Você pode ver o caminho na sua saída: /var/cache/apt/archives/bash_4.4-5_amd64.deb . Este é um arquivo ar(1) contendo três arquivos:

  • debian-binary
  • control-tar.gz
  • data.tar.xz

Observe que o arquivo data.tar pode não ser um arquivo xz compactado - há outros formatos - gzip, bzip, etc. Suponho que seja um arquivo xz , mas se não, você pode substituir esse sufixo e o programa zcat apropriadamente.

Você pode ver o conteúdo do arquivo .deb executando:

$ ar t /var/cache/apt/archives/bash_4.4-5_amd64.deb
debian-binary
control.tar.gz
data.tar.xz

Você pode ver o conteúdo do arquivo data.tar.xz executando:

$ ar p /var/cache/apt/archives/bash_4.4-5_amd64.deb data.tar.xz | xzcat | tar tvf -
...
./bin/bash
...

Você pode extrair /bin/bash disso:

$ cd /tmp
$ ar p /var/cache/apt/archives/bash_4.4-5_amd64.deb data.tar.xz | xzcat | tar xvf - ./bin/bash

Desde que você fez isso de /tmp . agora você terá o arquivo /tmp/bin/bash . Você pode copiar isso de volta para /bin e sobrescrever o bash novamente, mas desta vez com um bom conteúdo.

Existem ferramentas do dpkg que podem ser usadas para manipular arquivos .deb , mas como são arquivos simples, acho mais fácil lembrar como usar ar(1) e tar(1) em oposição às opções específicas do dpkg.

    
por 22.10.2017 / 02:56