Qual é a diferença entre socat e agetty?

3

Estou tentando configurar o virtio-serial para me comunicar entre uma máquina virtual e seu host. Para isso, estou seguindo as instruções dadas aqui:

Eu entendo que há uma porta no host em tmp/foo no host que é exposto como um dispositivo de caractere especial em /dev/hvc0 no convidado. O manual de instruções pede para usar socat no host e agetty no convidado para gerar as portas do console.

No entanto, ao usar agetty , eu não obtenho nenhuma porta do console, ao passo que, ao usar socat no guest também, posso me comunicar com o host.

Gostaria de saber quais são as principais diferenças entre socat e agetty e se essa é a maneira correta de usar socat, considerando que /dev/hvc0 é um dispositivo de caractere especial.

Eu dei uma olhada nas páginas de manual de ambos e gostaria de uma descrição detalhada.

    
por jobin 23.01.2014 / 13:19

1 resposta

4

Socat é um utilitário baseado em linha de comando que estabelece dois fluxos de bytes bidirecionais e transfere dados entre eles. Como os fluxos podem ser construídos a partir de um grande conjunto de diferentes tipos de fontes e coletores de dados, e porque muitas opções de endereço podem ser aplicadas aos fluxos, o socat pode ser usado para muitas finalidades diferentes. nixCraft

O socat pode fazer coisas de linha de série e pode executar funcionalidades bastante avançadas, como ter vários clientes escutando em uma porta ou reutilizar conexões. O ciclo de vida de uma instância social geralmente consiste em quatro fases.

  • Na fase de inicialização, as opções da linha de comando são analisadas e o log é inicializado.
  • Durante a fase aberta, socat abre o primeiro endereço e depois o segundo endereço. Essas etapas geralmente estão bloqueando; portanto, especialmente para tipos de endereços complexos, como meias, solicitações de conexão ou diálogos de autenticação devem ser concluídos antes que a próxima etapa seja começou.
  • Na fase de transferência, o socat vê os dois fluxos ler e escrever descritores de arquivos via select (), e, quando os dados estão disponíveis em um lado e pode ser escrito para o outro lado, socat lê, executa conversões de caracteres de nova linha, se necessário, e grava os dados no escrever descritor de arquivo do outro fluxo, então continua aguardando mais dados em ambas as direções.
  • Quando um dos fluxos atinge efetivamente o EOF, a fase de fechamento começa. Socat transfere a condição EOF para o outro fluxo, tenta desligar apenas o seu fluxo de gravação, dando-lhe a chance de termine graciosamente. Por um tempo definido, a socat continua a transferir dados na outra direção, mas depois fecha todos os canais restantes e termina.

agetty abre uma porta tty, solicita um nome de login e invoca o comando /bin/login . É normalmente invocado por init(8) . O agetty tem vários recursos não padrão que são úteis para conexões com fio e para linhas de discagem: ManPage

  • Adapta as configurações do tty a bits de paridade e apaga, mata, caracteres de fim-de-linha e maiúsculos quando lê um nome de login. o programa pode manipular caracteres de 7 bits com par, ímpar, nenhum ou espaço paridade e caracteres de 8 bits sem paridade. O seguinte especial caracteres são reconhecidos: @ e Control-U (kill); #, DEL e de volta espaço (apagar); retorno de carro e avanço de linha (fim de linha).
  • Opcionalmente deduz a taxa de transmissão das mensagens CONNECT produzidas por modems compatíveis com Hayes (tm).
  • Opcionalmente, não desliga quando recebe uma linha já aberta (útil para aplicativos de call-back).
  • Opcionalmente, não exibe o conteúdo do arquivo / etc / issue.
  • Opcionalmente exibe um arquivo de problema alternativo em vez de / etc / issue.
  • Opcionalmente, não solicita um nome de login.
  • Opcionalmente chama um programa de login não padrão em vez de / bin / login.
  • Opcionalmente ativa o controle de fluxo de hardware
  • Opcionalmente, força a linha a ser local sem necessidade de portadora detectar.
  • Suporta ringback, se desejado. O procedimento real que o getty usa é o seguinte: Inicialmente, o getty analisa sua linha de comando. Se não houver erros são encontrados, e o tipo tty da linha de comando é definido como "desconhecido" (o valor padrão), ou não definido, o getty verifica o tipo tty em / etc / ttytype se o programa foi compilado com TTYTYPE definido. Se um O tipo tty é encontrado, na linha de comando ou no / etc / ttytype arquivo, então ele é colocado na variável de ambiente TERM. Próximo, getty varre o arquivo padrão, normalmente / etc / default / getty, para determinar certos valores de tempo de execução (/etc/conf.getty se compilado com Opção FSSTND). Os valores no arquivo de padrões (cujo compilado nome pode ser alterado com o argumento opcional -d defaults_file) precedência àquelas na linha de comando. Getty, em seguida, abre a porta para leitura e gravação e desativa o armazenamento temporário stdio. Se um inicialização foi especificada, ela é executada.

Fontes extras: Socat , Getty MP

    
por Mitch 23.01.2014 / 15:00