Os programas do console serial¹ que você usará na outra extremidade da conexão terão alguma maneira de enviar um arquivo para o lado remoto. Como exatamente você faz isso depende de quais recursos você tem disponível no sistema remoto.
Eu tenho lrzsz
ou kermit
no lado remoto
O caso mais fácil é se você tiver um sólido programa de transferência de arquivos binários instalado no lado remoto, como lrzsz
ou kermit
. Isso foi mais comum do que hoje, mas seu sistema específico ainda pode ter um deles.
O programa de console serial que você está usando no local quase certamente tem uma maneira de fazer upload de Zmodem ou Kermit, o que permite enviar o que você precisar diretamente.
No caso do Zmodem, basta digitar rz
no sistema remoto, que envia uma string especial que o terminal serial local deve entender, fazendo com que apareça uma caixa de diálogo do seletor de arquivos.
O Kermit é um protocolo mais simples, portanto, você deve iniciar a transferência manualmente nesse caso.
Não tenho um programa de transferência de arquivos binários, mas tenho uuencode
/base64
Existem várias vantagens de usar um bom programa de transferência de arquivo binário como lrzsz
ou kermit
: eficiência, checksumming, tentativas automáticas, retomada transferência abortada, a transferência de arquivos múltiplos, etc., mas estes são luxos . Se você precisar enviar apenas um arquivo ou estiver enviando arquivos raramente, poderá fazer o upload de arquivos ASCII.
Como os protocolos de terminal interpretam muitos dos valores de bytes que ocorrem em um arquivo de dados binários, não é possível enviar o arquivo diretamente pela mesma conexão; se o fizer, o código de emulação de terminal em cada extremidade tentará interpretar alguns dados, corrompendo-os e provavelmente confundindo o código de manipulação de terminais.
Você pode contornar isso codificando os dados binários em um subconjunto seguro de ASCII no lado local e, em seguida, transformando-os novamente em dados binários brutos no lado remoto. É isso que os programas uuencode
e base64
fazem, diferindo apenas em pequenas escolhas de algoritmos.
No sistema local, você codifica o arquivo: ²
$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz
Em seguida, você digita este comando no sistema remoto e envia o arquivo usando o recurso "ASCII upload" do console serial local:
$ cat | uudecode
Quando o upload do arquivo terminar, pressione Ctrl-Cpara sair cat
. Agora você tem seu arquivo decodificado no sistema remoto, conforme desejado.
Mas eu tenho muitos arquivos para enviar e a transcodificação imprimível em ASCII é uma dor!
Não é difícil inicializar-se com um nível superior de tecnologia. Se o sistema remoto tiver um compilador C, você poderá usar a técnica anterior para enviar ao sistema remoto uma cópia do lrzsz
código-fonte. No lado local:
$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz
Em seguida, no sistema remoto, digite isto através do programa do console serial:
$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally
Depois de iniciar o primeiro comando, faça um "upload ASCII" do lrzsz.tgz.uue
arquivo no sistema remoto. O pipeline aceita os dados codificados e decodifica-os em um tarball binário para você, que você pode descompactar e construir.
Mas eu não tenho um compilador C no sistema remoto
Se você ainda não possui um compilador no sistema remoto, pode compilar de forma cruzada o programa rz
(ou o que for) no sistema local e enviá-lo ao sistema remoto usando a técnica acima.
Notas de rodapé:
minicom , picocom , PuTTY , VanDyke CRT ...
Você deve atribuir o nome do arquivo de entrada a esta versão uuencode
duas vezes, uma vez para nomear a origem dos dados de entrada e novamente para declarar como o sistema remoto deve chamar o arquivo quando decodificar os dados em um arquivo de saída. É possível que você queira que o sistema remoto tenha um nome diferente para seu arquivo de saída.
Sua versão local uuencode
pode se comportar de maneira diferente.