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

Lançado toybox 0.8.12

Lançado toybox 0.8.12

Lançado toybox 0.8.12


 Quase nove meses depois do seu ultimo lançamento, No dia 18 de Janeiro foi lançada a versão 0.8.12 do toybox. Essa nova versão não traz nenhum novo comando, nenhum comando promovido e foi mais focado em trazer novos recursos a comandos já existentes e várias correções.


RECURSOS

 Nesta nova versão o comando netcat recebeu as opções de saída hexadecimal -o para evitar grupos de entrada original e -O para contínuos. Além destas, agora netcat -f permite a comunicação com dispositivos serial.

 O comando tar agora permite tratar com alguns formatos obsoletos de tarballs além de permitir também compactar utilizando zstd (-Z ou --zstd); o comando devmen recebeu as opções -f ARQUIVO--no-sync e --no-mmap; o comando mount recebeu a opção LABEL= e Firas Khana (autor da distribuição Glaucus Linux que eu tive a chance de entrevista-lo) fez com que os comandos lsusb e lspci verifiquem também dentro do diretório /usr/share/hwdata. O comando dmesg recebeu a opção -W (--follow-new) e o getconf recebeu as opções NPROCESSORS_CONF e NPROCESSORS_ONLN.


toysh, sh e bash

 Os comandos que a equipe do toybox mais pretende alcançar um bom nível de maturidade são o toysh, o sh e o bash pois estes comandos são essenciais para a execução de scripts e inicialização tanto do sistema operacional quanto da sessão de login. Tendo estes comandos completamente funcionais torna possível ter um sistema operacional com um shell independente. O grande problema é que eles ainda não estão prontos para serem utilizados em produção tendo a equipe um longo trabalho pela frente até conseguir obter algo realmente funcional e compatível com outros shells. Confira meu vídeo abaixo a respeito do bug que eu reportei a equipe:



 Bom, o que podemos fazer agora é aguardar para que estes três comandos amadureçam ao ponto de poderem ser compatíveis com todos os nossos scripts. Voltando as novidades, foram adicionados ao comando test as opções -ef-ot e -nt seguindo a especificação POSIX 2024.



 Foi implementado return, move break e continue para substituir special cases; houveram mudanças no design que permitem "trap" assincronamente chamar funções de um manipulador de interrupções e aplicaram outras correções. Dentre os testes com  TEST_HOST que passou no bash 5.2.

Vi

 E por que não falar da implementação do editor de texto vi já que falamos de shellscript e se tratar de uma ferramenta necessária para a criação de nossos scripts? A implementação do vi do toybox (ainda como pendente) recebeu suporte a tratar de argumentos inválidos da opção `:g`  sem gerar buffer overflow; correção de buffer overflow quando entrar comandos longos; simplificação de testes e verificação de leitura de out of bounds em buffer vazio na opção `p`.


PENDENTES

 Nos pendentes estão a implementação do awk.c que recebeu 46 commits até o momento; o comando diff recebeu a opção --no-dereference e correção nas comparações entre links simbólicos e fifos; o cornd recebeu várias correções; o stty recebeu FLUSH ao invés de DRAIN e o toybox recebeu suporte inicial a UTF-8.

 Houveram várias correções de bugs e limpezas; a biblioteca do toybox recebeu modificações e remoção de recursos legados. Agora é usufruir das novidades da nova versão e aguardar pela versão 1.0 (torço muito por isso).

para conferir as novidades completas da versão 0.8.12 toybox, basta clicar aqui

Mais sobre o toybox pode ser lido clicando aqui

Mais sobre a distribuição Glaucus pode ser lido clicando aqui

QUER APRENDER LINUX? ENTÃO CONFIRA O MEU CURSO DE MIGRAÇÃO PARA LINUX CLICANDO AQUI :)
QUER APRENDER LINUX? ENTÃO CONFIRA O MEU CURSO DE MIGRAÇÃO PARA LINUX CLICANDO AQUI :)

Lançado novo Minicurso de atributos no Linux
E não esqueçam de conferir também o meu mini curso de atributos no Linux

Lançado toybox 0.8.11

Lançado toybox 0.8.11

Lançado toybox 0.8.11

 No dia 8 de Abril foi lançada a versão 0.8.11 do terminal de comandos toybox (depois de nove meses depois de o ultimo lançamento, mas tivemos bastante novidades). Dentre as novidades estão os comandos tsortts, csplit e memeater. Os comandos fold e getopt foram promovidos.

 Os comandos também receberam novos recursos, em especial o comando mv que dua grande novidade é foi receber a nova opção -x (ou --swap) que agora permite indicar dois caminhos no file system de forma atômica. Observação que deve ser feita é que essa opção só é possível dentro do mesmo file system e caso não haja suporte a atomic swap, uma mensagem de erro será retornada. Esse recurso é permitido através syscal renameat2() que está presente no Linux há ~10 anos (essa é a minha grande critica ao Linux, tantos recursos poderosos e pouco explorados). Não parei para testar essa opção, mas eu trago algo aqui quando tiver tempo já que é a unica implementação de comando mv que possui esse recurso. Rob Landley enviou seu patch para o busybox e para o coreutils; se os projetos irão aceitar, já é outra história. Este recurso não estará disponível para as versão do MacOS e do FreeBSD já que se trata de uma system call do Linux, então, Rob Landley precisou gerar uma função no arquivo portability.[ch] para não ocorrer erros.

 O comando env -e ARQUIVO executa um comando diferente de argv[0]; o comando reset agora coloca os terminais brutos de volta no modo "cooked"; sort -k conta da direita para a esquerda, setsid segura o tty removendo a necessidade do getty e a opção -CC tenta pegar a sessão; o comando mount agora exibe file= quando exibe mounts em loopback; o comando wc (não gosto do nome desse comando, parece banheiro) ganhou a opção -L que exibe linhas mais longas; o comando tar ganhou a opção -h que detecta mais hardlinks; o comando cp agora copia xattr para diretórios e não somente arquivos; o comando count recebeu a opção -l e o netcat a opção -z. Os comandos readelf, ifconfig e file receberam novas informações a serem exibidas na tela

 Como em todo projeto que se presa em seu lançamento, houveram muitas correções de bugs, limpezas, muitas novidade em sua biblioteca e nos comando como pendentes; inclusive o comando passwd foi temporariamente despromovido devido a reescrita em na infraestrutura do lib/passwd.c  que ainda não está pronta. O comando yes agora utiliza a chamada writev() para melhorar o seu desempenho e evitando muitos bugs.


Saiba mais sobre o toybox clicando aqui


Lançado toybox 0.8.10

Lançado toybox 0.8.10

Lançado toybox 0.8.10


 No dia 30 de Julho, foi lançada a versão 0.8.10 do terminal de comandos Toybox, depois de uma espera de mais de seis meses desde o lançamento da ultima versão. Acredito que foi devido as apresentações que andaram fazendo sobre o j-core no Japão (e que eu particularmente estou ansioso por isso). Bom, foi adicionado o novo comando shuf, e o Elliott adicionou o comando i2ctransfer. Foi concluído as limpesas no comando dd e saiu do diretório pendente. Fazendo a minha observação sobre o comando dd, eu testei e acabei gostando muito pois, honestamente, conheço outras implementações do comando dd e o do GNU é o que mais me agrada devido as suas opções como status (opções em comandos é algo que me agrada muito). Veja abaixo uma comparação entre o dd do embutils e do toybox.

toybox dd
Comando dd do terminal toybox



embutils dd
Comando dd do pacote embutils


NOVAS OPÇÕES DE COMANDOS JÁ EXISTENTES

 Também foi adicionado ao comando dd suporte a POSIX 1x2x3 (com detecção overflow). O comando tar recebeu novas opções como -s, --ignore-case, --wildcards, --anchored, --wildcards-match-slash, --one-file-system. O comando ls recebeu a opção --block-size e melhoria na opção --sort, o comando cpio recebeu as opções -R que permite definir  user/group de todos os arquivos e a opção -L segue symlinks; o comando gzip recebeu a opção -t para realizar teste de integridade de arquivos, find recebeu a opção -readable,  a opção -DFR do comando cut (que é um dos melhores cut que eu já utilizei) agora possui --longopts aliases (como sugerido pela lista do coreutils). o comando oneit agora auto-detecta console a partir do sysfs, o comando i2cget recebeu suporte a next address para melhorar a bus limit (além de Jarno Mäkipää ter ensinado o comando i2cget a fazer leitura sem passar um byte de comando) e o lspci recebei a opção -x (referente a hex dump do espaço de configuração do pci). Também foi ensinado ao comando blkid a reconhecer imagens ISO.


O toysh

 Se tem algo que todos andam esperando com ansiedade é o toysh (também englobam os comandos sh e bash. Sim, o toybox possui o comando bash) pois tendo um terminal de comandos compatível com  scripts de outros terminais, você acaba possuindo um terminal de comandos que torna o seu sistema operacional independente e possível de ser executado como terminal de comandos padrão. Eu reportei alguns bugs durante a versão 0.8.6 mesmo sabendo que o comando toysh, sh e bash ainda estavam como pendentes.


 E o trabalho tem sido bem intenso sobre este comando até mesmo por parte do Google. Agora, vamos verificar o estado do toysh. Nas notas de lançamento, Rob Landley descreveu:

"Análise de opção de linha de comando para no primeiro argumento nonoption, todos os segmentos canalizados agora estão implicitamente subshelled então os tempos de vida variáveis correspondem aos do bash e loops não precisem sair antes de prosseguir para o próximo (ala "while true; do echo hello; done | while read i; do echo $i; done" pendurado em toda a saída de um pipe). Várias mudanças para o processamento de HERE document* (expansões variáveis podem causar continuações de linha em um HERE document, etc), e melhor manipulação de continuação de linha em geral, adicionado set -u, corrigido retorno de códigos if/while, conectado ao builtin "local", corrigido um bug de passagem de escape relatado por Mingliang Hu, suporte a redirecionamentos não delimitados (ala cat<file sem espaços), corrigido ${X::} sem argumentos."

 Ainda não realizei os mesmos testes, mas em breve pretendo. Houveram também, como sempre, muitas correções de bugs, limpezas, portabilidade, melhorias no build, implementações de recursos na biblioteca do toybox, melhorias na Test suite e na documentação. Os comandos do diretório pending também receberam melhorias como como o git, correções de bugs nos comandos init e login, suporte a risc-v no comando strace, correção na opção :w e -s do vi (além de terem o ensinado a respeito de backspace e melhoria em lidar com arquivos vazios) e várias limpesas no tcpsvd.

 O mkroot (que é a distribuição voltada somente para teste de implementação do toybox, mas que o Google demonstra interesse nessa distribuição para outros projetos) recebeu várias melhorias


*HERE document, também podendo ser abreviado para heredoc e outras formas, consiste na sintax << e here string em <<<.


Pré-lançamento da distribuição Glaucus

Pré-lançamento da distribuição Glaucus

Pré-lançamento da distribuição Glaucus


 Projetada do zero, glaucus uma distribuição Linux® independente baseada na biblioteca musl libc e, diferente do Alpine Linux que utiliza o Busybox, Glaucus utiliza o toybox como terminal de comandos padrão.

 Iniciada em 2018 como um hobby inspirada em alguns projetos (que podem ser conferidos aqui), Glaucus foca em ser  rápida, rolling-release enquanto mantem uma base limpa, leve e, o mais importante, sem sacrificar a coneniência. Autalmente está disponível para x86-64-v3, aarch64 e riscv64.

 Foi lançada no dia 28/04/2023 a versão glaucus-s6-x86-64-v3-28042023 e todas as suas novidade podem ser conferidas clicando no link abaixo:


No mesmo link podem ser conferidos todos os detalhes da distribuição, sua principal licença (ISC License) e seu propósito.

Agora o Gláucia é self hosting sendo capaz de compilar sua toolchain.

Lançado toybox 0.8.8

toybox 0.8.8

Lançado toybox 0.8.8


 Na semana passada foi lançada a versão 0.8.8 do terminal de comandos toybox. Essa versão não traz comandos promovidos do diretório pendente. Como já é de conhecimento, esse já é o segundo lançamento desde que o Google passou a financiar Rob Landley. A intenção do Google é para ter o toybox funcionando no hermetic build (distribuição Linux já mencionada aqui no blog) enquanto Rob foca em paralelo para que o toybox venha tornar o Android self hosting (permitir que o Android seja possa ser construído no próprio Android).

 Apesar que essa versão não houve comandos promovidos, ela traz vários novos recursos como a nova opção -i do comandos timeout que elimina um comando por inatividade; suporte básico ao tar --xform mais ainda não as opções especiais tar-only s///x além da opção --null para reconhecer algumas imagens do kernel Linux e binários para novos merges arch/loongarch (uma variantes chinesa do mips64 já mencionada aqui no canal a situação da empresa mips e essa nova variante).

 Foi adicionada a opções --long permitindo que o comando ls possa executar a opção --col e entender como a opção --color; o blkid recebeu a opção -o entendendo o formato "full", "value", e "export"; o comando mount recebeu a opção -R para permitir recursividade e também autodetectar --bind e --loop (apesar que eu não vi essa opção presente no comando mount).

tar --xform e ls --col
tar --xform, --null e ls --col

 A biblioteca do toybox também recebeu novas funções (xrunread() que permite trabalhar com função filho; same_file() e same_def_ino() para simplificar compressão de metadados) e mais dois novos modificadores (" " e ";") no arquivo lib/args.c que permitem 4 combinações de set e unset que possuem semanticas definidas. lib/arg.c também recebeu "~" para que longopts possa trabalhar com

PENDENTE

 Em pendente há muito trabalho sendo feito no toysh, sh e bash que como já demonstrei anteriormente no meu vídeo sobre o bug que reportei, não estão prontos para serem utilizados para a execução de scripts. No dia 23 de Junho, Rob reportou que estava decepcionado com o resultado do trabalho no sh.c pois, sua expectativa era que ele atingisse no máximo 3.500 linhas de código e nessa época, já estava aproximando-se de 5.000. Mas muito trabalho vem sendo feito e vou realizar novos testes.


 Houveram atualizações do comando diff, limpezas no comando dd (comando que estou esperando bastante) mas ainda não estão prontos para ser promovidos apesar do atraso no lançamento.

 Houveram também correções de bugs, adição de warnigs, melhorias na sessão test e na documentação. Todos os detalhes do novo lançamento podem ser conferidos no site oficial do projeto.


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.

Marcadores

A pior história sobre Linux que já ouvi (6) A.I (2) ambiente gráfico (19) AMD (14) analise (10) Andriod (16) android (7) Apple (1) arm (5) artigo (5) aws (1) bc (23) benchmark (6) BetrFS (1) blackhat (1) BSDs (34) btrfs (32) bugs (2) Caixa de Ferramentas do UNIX (19) canonical (1) canto do Diego Lins (2) certificações Linux (7) Código Fonte (54) comandos (33) comp (1) compressores (9) container (8) CPU (19) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (13) Debian (31) desempenho (2) desenvolvimento (100) desktop (19) DevOps (3) DevSecOps (4) dic (1) Dica de leitura (91) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (4) diocast (1) dioliunx (3) distribuições Linux (14) Docker (13) DragonflyBSD (24) driver (2) dropbear (3) ead Diolinux (2) edição de vídeo (5) embarcados (1) EMMI Linux (4) emuladores (9) endless (5) English interview (3) Enless OS (2) entrevista (17) espaço aberto (82) evento (6) facebook (1) Fedora (11) filesystem (82) financiamento coletivo (2) fork (4) fox n forests (4) FreeBSD (21) Funtoo Linux (13) games (94) garbage collector (1) gerenciadores de pacotes (4) glaucus (8) GOG (3) google (9) gpu (3) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (12) Intel (15) inteligencia artificial (2) IoT (1) ispconfig (1) jogos (38) kde (1) kernel (141) lançamento (64) leis (1) LFCS (1) libs (2) licenças (10) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (5) lkgr (1) LPI (8) LTS (1) Mac (1) machine learning (1) matemática (9) mesa redonda (27) microcontroladores (1) microsoft (6) microst (1) muito além do GNU (176) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (9) nimlang (1) nintendo (1) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) ONLYOFFICE (4) open source (85) OpenBSD (8) OpenShift (1) oracle (1) os vários sabores de Linux (45) padrim (2) palestras e eventos (5) partições (6) pentest (8) performance (1) pipewire (1) plan9 (3) playstation (1) processadores (30) professor Augusto Manzano (11) Programação (71) promoção (1) propagandas com Linux (8) ps4 (1) real-time. (1) Red Hat (23) redes (4) resenha nerd (4) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (14) RISCV (13) rtos (1) runlevel (2) rust (16) segurança digital (27) servidor web (2) servidores (3) shell (10) shell script (8) sistema operacional (25) skarnet (2) smartphones (3) Software livre e de código aberto (152) sorteio (3) Steam (10) Steam no Linux (8) supercomputadores (4) suse (7) systemd (8) terminal (89) terminal de comandos (20) toca do tux (1) toybox (28) tutorial (6) Tux (3) ubuntu (1) unboxing (7) UNIX (17) UNIX Toolbox (14) vartroy (1) vga (1) virtualização (3) vulnerabilidade (6) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (16) zsh (3)