Mostrando postagens com marcador toybox. Mostrar todas as postagens
Mostrando postagens com marcador toybox. Mostrar todas as postagens

Lançado toybox 0.8.7

toybox command line terminal

Lançado toybox 0.8.7

 No dia 6 de Maio foi lançada a versão 0.8.7 do toybox; o terminal de comandos padrão do Android. O toybox é utilizando também em vários outros projetos como o sbase, no POSIX-2008/SUSv4, no Linux Standard Base, no buildroot, na klibc (que já teve vídeo no canal), no Nash do Fedora, no Beatiebox do FreeBSD, no BsdBox, e vários outros projetos.

NOVOS COMANDOS

 O toybox 0.8.7 recebeu novos comandos: uclampset, gpiodetect, gpioinfo, gpioiget, gpiofind, gpioset e uma versão simplificada do httpd (inicialmente para realizar testes com o comando wget) porém, o comando catv foi removido já que todos utilizam o comando cat com a opção -v (honestamente eu nem tinha reparado nesse comando no toybox).

catv
o comando catv foi descartado no toybox 0.8.7


COMANDOS PROMOVIDOS

 Os comandos host, wget, openvt e deallocvt saíram do diretório pendentes para revisão e foram promovidos para estáveis depois de receber limpezas (aí eu senti firmeza). Outros comandos também receberam limpezas como nos comandos ping, fsync, ionice, pmap, truncate, timeout, tty, factor, mount, fusão do chvt/deallocvt para o openvt.c; fusão do lspci.c para o lsusb.c permitindo que compartilhem arquivos de configuração (config file reading infrastructure) e remoção do arquivo lib/linestack.c que ficou parado lá por anos. Vale a ressalva que esses comandos ainda permanece em pendentes ou já eram declarados estáveis.


NOVOS RECURSOS

 Há também novos recursos em comandos já existente como o top que agora permite se locomover entre a lista SHIFT LEFT/RIGHT (esse eu achei doido); o find -samefile (além das correções de bugs nas opções -newerXY e @time.nanosecond parsing), o cmp -n, o tar recebeu a opção --strip components e as opções --owner e --group agora permitem especificar :UID e :GID; os comandos lsusb e lspci agora realizam a leitura dos arquivos /etc/{usb,pci}.ids[.gz] para proporcionar leitura humana; o ifconfig se tornou capaz de renomear interfaces.



CORREÇÕES DE BUGS

 Houveram várias correções de bugs também como no cp --preserve xattr e cp --xattr (nesse último caso evitam copiar contextos do selinux); o sort -u; wget -O - (agora escrevendo na saída); pwget -B remove mais caracteres que outras implementações não emitem; sed agora trabalha com múltiplo w para o mesmo arquivo (essa é a versão de ser que eu mais gosto. Leia também sobre o minised); correções no nl -E, realpath -e, várias no sh (${X: -1:1} que não é o mesmo que ${X:-1:1} devido :- possuir um sentido especial).

 Um desenvolvedor do Google enviou um patch para o toysh eliminando avisos desnecessários quando compilado com o clang. Mais sobre o avanço do toybsh pode ser conferido no próprio blog do Rob Lanldey clicando aqui. Muitas pessoas andam dando bastante atenção ao toysh pois esse será um grande salto para o Android. Com isso, muitos testes estão sendo realizados como o próprio Rob mencionou em seu blog que possui notas de teste para o toysh como como echo $ (se verdadeiro)echo $ (verdadeiro &&) e echo $(case a in a) echo hello;; esac) que podem produzir erro de sitax. Eu mesmo recentemente postei um vídeo explicando como eu reportei a Rob Landley o bug que encontrei.


 Eu incentivo a todos a testarem seus scripts com o toysh e caso apresentar erros, reportem os erros e como reproduzí-los pois isso facilita bastante os trabalho da equipe (seus testes são importantes); quanto mais testes forem realizados, melhor para que o toysh execute scripts com a mesma fidelidade e compatibilidade que outros terminais. Rob landley mesmo postou em seu blog que está realizando vários testes e que "é por isso que ele tem/precisa de muitos testes".

Como encontrei um bug no comando sh

Encontrei um bug no comando sh

Como encontrei um bug no comando sh

 Recentemente eu encontrei um bug tanto nos comando sh e toysh do terminal de comandos toybox ao tentar utilizá-los para executar um script que elaborei para uma das minhas novas aulas de shell script do meu CURSO DE MIGRAÇÃO PARA LINUX. Então eu decidi explicar em um vídeo como eu encontrei tal bug reproduzindo-o com os dois comandos.

 A minha intenção é motivar e encorajar vocês que não são desenvolvedores a reportar bugs às equipes dos projetos adotando a cultura bazar já mencionado aqui algumas vezes. Vocês não precisam ser desenvolvedores para reportar bugs (é muita ingenuidade acreditar que sim) e acreditem, vocês vão facilitar muito a vida das equipes.


 Porém um detalhe que eu poderia ter mostrado no vídeo ao compilar o código fonte para reforçar é que, quando seu código fonte é compilado com o padrão ./configure e make conforme demonstrado no vídeo, a versão compilada não possui nenhum dos dois comandos:

Android toybox 0.8.6
Reparem as linhas selecionadas com s e t na versão compilada do toybox 0.8.6 que ambos os comandos não existem.

Repare que nem um dos dois comandos serão encontrados ao tentar executar.
Repare que nem um dos dois comandos serão encontrados ao tentar executar.

 Cheguei até mesmo compilar o comando sh separadamente e testá-lo (a toa pois o resultado seria o mesmo). Bom, reforço que este é o terceiro bug que eu encontro no terminal e que estarei reportando em breve; pode acabar sendo util... ou não na pior das hipóteses. Somente reportando para descobrir.

Google passa a financiar o desenvolvimento do terminal de comandos toybox

Google passa a financiar o desenvolvimento do terminal de comandos toybox

Google passa a financiar o desenvolvimento do terminal de comandos toybox

 Rob Landley anunciou que o Google estaria financiando o desenvolvimento do toybox principalmente com o avanço do Hermetic (eu jurava que não tinham dado continuidade nesse projeto) tendo este linkado o terminal de comandos com host bionic tornando o sistema operacional capaz de ser construído em si.

 Isso porque o Android é construído através de compilação cruzada. Ao tornar o sistema self hosting, ele não dependerá mais de outro sistema operacional para que seja compilado (como o próprio nome sugere). Este recurso (os comandos sh e toysh) foi adicionado no toybox a partir da versão 0.8.4 como pode ser conferido clicando aqui.

toybox toysh and sh commands
Os comandos toysh e sh que permitem o toybox tornar o sistema operacional self hosting.

 A partir da versão 0.8.5 o toybox passou a ter 85% de tudo o que um terminal de comandos precisa para ser utilizado como terminal de comandos padrão. Hoje estamos na versão 0.8.6 porém, ainda há certos recursos listados pela equipe para incorporar ao terminal de comandos e assim torná-lo capaz de compilar o kernel Linux.

 Questionado "se o toysh será capaz de substituir o dash" Rob Landley respondeu que "visa substituir o bash" (pode ser lido clicando aqui). Eu torço para isso, ams a minha preferência é o Zsh (terminal de comandos muito mais poderoso e muito mais interessante que o Bash). O motivo de demorar parao lançamento da versão 1.0 do toybox (seu ultimo lançamento foi no final de Novembro do ano passado) é que a maior parte dos membros o desenvolve nas horas vagas (inclusive o próprio Rob).

 Só que nos dias 28 e 30 de Janeiro deste ano, Rob publicou as seguintes notas em seu blog:
Estou muito satisfeito por começar a trabalhar na lista de tarefas do toybox hermetic build do Google, mas amanhã tenho que preencher a papelada com o estado do Texas (posso reutilizar o nome Impact Linux de 2008, ou preciso encontrar outro que passe uma busca de conflito), e então eu preciso de um EIN federal ou não?
Eu quero fazer o trabalho. Preciso limpar muitos itens de tarefas. Escrevi um monte de coisas que preciso lembrar de fazer no verso de um envelope esta manhã e, claro, deixei em casa
 Não há como eu opinar nas questões financeiras de uma empresa. Mesmo a Google tendo tamanho Patrimônio, não há como eu saber o quão rentável o Android é para a empresa, principalmente depois da ação judicial que a Oracle moveu contra a Google. Porém assim mesmo eu me faço a seguinte pergunta, só agora? O terminal de comandos toybox é utilizado no Android desde a versão Marshmallow (versão 6 do Android lançado entre 2014 e 2015). Eu mesmo venho divulgando sobre o toybox desde 2017 com a série Muito além do GNU. Será que em oito anos o toybox não apresentou retorno financeiro o suficiente para que a Google financiasse a equipe do projeto. A linguagem bc do Gavin Howard mesmo é utilizado como dependência para compilar o kernel Linux do Android; não seria interessante financiá-lo também?

bc language by Gavin Howard
Linguagem bc de autoria de Gavin Howard.

 O mesmo ocorreu com o CentOS e o Rocky Linux. Quando a Red Hat anunciou o fim do CentOS e iniciou o CentOS Stream, maioria dos usuários de Linux julgaram a Red Hat uma mercenária e egoísta. Interessante é que todos bebiam da fonte do CentOS, mas quase ninguém contribuía (pelo o que me contaram, só haviam dois mantenedores da versão 8 do CentOS). Daí anunciaram o Rocky Linux como seu substituto e hoje o Rocky Linux conta com grandes empresas o financiando como Amazon e Microsoft (inclusive a própria Google). Não seria mais fácil ter financiado o CentOS ao invés de ter deixado o projeto morrer e já que todos bebiam dessa fonte?...

Rocky Linux Sponsors
Patrocinadores do Rocky Linux

 Fica a dica a todos; se você gosta de um projeto, não deixem a sua fonte secar. É melhor do que ficar lamentando depois pelo seu fim. Bom, ao menos a Google tomou essa iniciativa (antes tarde do que nunca); porém, nós também podemos fazer o mesmo (vale para nós também).

toybox recebendo sua própria versão do strace

toybox recebendo sua própria versão do strace
toybox recebendo sua própria versão do strace
 Recentemente foi lançada a versão 0.8.6 do terminal de comandos toybox. Somente dando uma recapitulada, o toybox é um terminal de comandos feito do zero e que passou a ser utilizado no Android a partir da versão 7. Todos os seus comandos foram e são desenvolvidos do zero; mesmo sendo comandos que você já tenha familiaridade, trata-se de suas próprias versões dos mesmos comandos sendo livre de códigos de terceiros. E como todos os seus comandos, o toybox receberá sua própria versão do comando strace.

Compilando o strace do toybox.
Compilando o strace do toybox.
 Essa primeira versão recebeu incialmente suporte apenas a um pequeno conjunto de system calls e opções, mas  já é possível realizar certos trabalhos normalmente. Uma parte fundamental que informam é que não há com o que se preocupar com certas funções do strace devido torná-lo muito complexo e que por esse motivo o Android nunca teve uma versão do strace (além de haver um período de transição gradativa dos micro-controladores)

strace do toybox e suas opções.
Opções strace do toybox.
 Uma informação que eu obtive é que Rob Landley quer uma versão de strace sem decodificação (apenas números brutos), o que esperam que não seja algo complicado. Tem também o fato de a glibc não utilizar as mesmas estruturas do kernel podem apresentar certos problemas, o que os leva a adicionar mais linhas de código para cada arquitetura que querem apresentar suporte (vale lembrar que a dietlibc utiliza a mesma estrutura do kernel Linux).

Rastreando o comando ls com o strace do toybox.
Rastreando o comando ls com o strace do toybox.
 Ainda há um longo caminho a ser percorrido; o strace do toybox está recebendo bugfix e talvez não terá a versão para MacOSX. Vamos aguardar para ver a evolução de mais um comando surgindo no toybox.

Lançado toybox 0.8.6

Lançado toybox 0.8.6
Lançado toybox 0.8.6

 Foi lançada versão 0.8.6 do terminal de comandos toybox que dentre as suas maiores novidades estão os comandos linux32 e sha256sum e as variantes relacionadas 224/384/512 (algo que já era previsto e que pode ser conferido aqui) e binários da versão bootável do mkroot através do QEMU.

man 8 linux32
Comando Linux32 no toybox
man 1 sha256sum
sha256sum e as variantes relacionadas 224/384/512
 Mkroot é de uma distribuição Linux criada pelo proprio Rob Landley para servir apenas como base de testes de implementação do toybox; assim sendo seu propósito, conseguindo tornar o toybox como terminal de comandos padrão no mkroot, logo o toybox estará pronto para ser utilizado como padrão em quaisquer outras distribuições Linux (vale lembrar que o toybox já foi portado também para MacOS e alguns BSDs). Anteriormente o mkroot se chamava Aboriginal Linux, depois foi mudado para mkroot e planejavam mudar para Hermetic (que inclusive eu achei um nome bem legal) e por fim acabou ficando como mkroot mesmo.
mkroot
Analisando uma das imagens do mkroot
 No diretório pendente foram adicionados os comandos hexdump e strace. O toysh (que foi grande destaque no ultimo lançamento) recebeu suporte a novos recursos como o $((math)), atribuição +=, "declare" e tipos de variáveis correspondentes (declare -i, declare -u e etc), várias correções de bugs, melhorias para processos em plano de fundo em sistemas NOMMU e mais um monte de entradas sh.test. Ainda em pendente o modprobe, o vi, o syslogd, o wget também receberam melhorias.

toyshell
Testando o toysh (toy shell) que nos permite utilizar o toybox como terminal de comandos padrão. Ainda não está bom o suficiente, bem no estilo dos terminais antigos ainda, mas já temos algo.

 Outros comandos também receberam novas opções como date -s; pmap -p; tail -F -s; kill -0; reboot/halt/poweroff -d; tail --bytes --lines; i2cdetect -q; find -quit -lname -ilname e -d como sinônimo para o -depth; cpio --ignore-devno --renumber-inodes; tar --selinux e uma mensagem de erro ao final; agora o comando uname com a opção -o exibe a mensagem Toybox. Ensinaram também outros comandos a ter novos comportamentos. 

man 1 uname
toybox uname -o agora exibe a mensagem Toybox ao inves do sistema operacional.

 Uma opção que já estava disponível na ultima versão mas que vale ressaltar é que o comando cut do toybox possui o recurso -DF que permite o cut se comportar como o awk '{print $3}'.

Comando cut do toybox
Comando cut do toybox que possui as opções D e F.

  A licença 0BSD agora é parte do padrão ISO-5962. Houveram também muitas correções de bugs, limpezas e  muitas melhorias na parte de infraestrutura. Todas as novidades podem ser conferidas aqui.

Antigamente a versão binária do toybox disponível em seu site oficial, apesar de sempre ter sido linkada estaticamente com a musl, era compilada com o gcc através da ferramenta crossmusl. Agora a versão binária é compilada com o LLVM através da ferramenta musl-clang.

Um conselho que eu quero dar é que caso queira compilar o toybox (algo que eu já ensinei) seria não compilar o bc disponibilizado no toybox (não utilize nem o bc do gnu e nem o bc do toybox). Compile e utilize a versão bc de autoria do próprio Rob Landley que eu já mostrei aqui que é bem mais completo e cheio de recursos.

Toybox receberá suporte nativo a família de hash sha-2

Toybox receberá suporte nativo a família de hash sha-2
Toybox receberá suporte nativo a família de hash sha-2

    No dia 19 de Maio foi anunciada a versão 0.8.5 do terminal de comandos toybox. As informações sobre a nova versão podem ser conferidas clicando aqui. Eu ando realizando testes na linguagem bc do toybox e aparenta não estar apresentando problemas. Essa é uma linguagem bem interessante para que você possa realizar cálculos que o Bash não possui suporte.
    O desenvolvedor Dan Brown enviou no dia primeiro de Junho o patch que adicionará ao toybox o suporte a hashes da família sha-2 (sha224sum, sha256sum, sha384sum e sha512sum) permitindo-o utilizar suas funções de forma nativa ao invés da depender biblioteca do OpenSSL. Atualmente, a última versão do o toybox (0.8.5) possui suporte nativo aos hashes sha1sum e sha3sum


    O patch foi aceito no (devido não ser código de ninguém e ser bem trabalhado) e provavelmente iremos ver a família sha-2 no próximo lançamento do toybox. Espero que isso traga outras familias de hashes ao toybox como o $2b$ (inclusive mencionados em minha palestra A evolução do Linux) apareçam no toybox. É esperar para ver.

Marcadores

A pior história sobre Linux que já ouvi (5) A.I (1) ambiente gráfico (19) AMD (14) analise (9) Andriod (14) android (5) artigo (5) aws (1) bc (15) benchmark (3) BSDs (27) btrfs (30) bugs (1) Caixa de Ferramentas do UNIX (19) canto do Diego Lins (2) certificações Linux (7) Código Fonte (53) comandos (24) comp (1) compressores (5) container (6) CPU (19) criptografia (4) crowdfunding (9) cursos (24) daemons (13) Debian (31) desenvolvimento (80) desktop (19) DevOps (3) DevSecOps (3) dic (1) Dica de leitura (86) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (1) diocast (1) dioliunx (3) distribuições Linux (13) Docker (11) DragonflyBSD (20) ead Diolinux (2) edição de vídeo (5) EMMI Linux (4) emuladores (5) endless (5) English interview (3) Enless OS (2) entrevista (17) espaço aberto (82) evento (6) facebook (1) Fedora (10) filesystem (75) financiamento coletivo (2) fork (4) fox n forests (4) FreeBSD (20) Funtoo Linux (13) games (90) gerenciadores de pacotes (3) GOG (3) google (8) gpu (3) hardware (101) hash (1) helenos (3) I.A (1) init system (8) Intel (15) IoT (1) ispconfig (1) jogos (36) kde (1) kernel (134) lançamento (60) leis (1) LFCS (1) licenças (8) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (5) LPI (8) LTS (1) machine learning (1) matemática (4) mesa redonda (27) microsoft (6) microst (1) muito além do GNU (146) não viva de boatos (9) navegadores (3) NetBSD (7) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) open source (82) OpenBSD (5) OpenShift (1) os vários sabores de Linux (39) padrim (2) palestras e eventos (5) partições (6) pentest (8) pipewire (1) processadores (27) professor Augusto Manzano (11) Programação (60) promoção (1) propagandas com Linux (8) Red Hat (21) redes (3) resenha nerd (4) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (1) runlevel (2) segurança digital (19) servidores (1) shell (3) sistema operacional (22) smartphones (3) Software livre e de código aberto (150) sorteio (3) Steam (9) Steam no Linux (7) supercomputadores (4) suse (7) systemd (7) terminal (83) terminal de comandos (11) toca do tux (1) toybox (23) tutorial (6) Tux (3) unboxing (7) UNIX (16) UNIX Toolbox (14) vartroy (1) vga (1) vulnerabilidade (4) wayland (5) whatsapp (1) Windows Subsystem for Linux (2) wine (14) WoT (1) ZFS (13) zsh (2)