Conhecendo um pouco mais sobre Configurações de hardware, Inicialização do sistema e Níveis de execução

17/04/2018 Carlos Jefferson , , , , , , >

No post de hoje iremos abordar temas que em primeira vista podem parecer complexos mas que nós usuários deste maravilhoso sistema observamos seus usos diariamente, ou pelo menos uma vez na vida.

O primeiro dos temas está logo abaixo.

CONFIGURAÇÕES DE HARDWARE

Configurações de hardware são, logicamente, estados de sistema que definem como proceder em conformidade com as opções de configurações.

No que diz respeito a estado de sistema temos as informações de sistema.

INFORMAÇÕES DE SISTEMA

São informações diversas sobre determinados componentes de sistema, como estado, arquitetura, dispositivos, entre outros.

É possível, a partir destes dados, manipular diversos comandos e extrair aquilo que quisermos do nosso sistema.

A seguir, teremos alguns comandos que são bastante utilizados para deter informações do sistema:

  •    ls* Family;
  •    dmicode
  •    proc files

Iremos nos ater por instante apenas a família ls*, que é uma série de comandos importantes.

A série de comandos ls* é um conjunto de comandos de sistema que mostram determinado estado de um componente. Os que julgo principais são os que seguem abaixo:

  • lscpu: Mostra informações sobre a arquitetura e dos componentes da CPU e processadores;
  • lsscsi: Mostra atributos de sistema de hosts da máquina(como infos básicas de hd, etc);
  • lsusb: Mostra informações sobre dispositivos USB conectados ao sistema;
  • lspci: Retorna configurações e estados dos componentes presentes na arquitetura PCI;
  • lshw: Fornece informações detalhadas das configurações da máquina, como memória, etc;
  • lshal(hardware abstraction layer): Traz ao usuário detalhes sobre a camada de hardware abstrato, que é uma espécie de driver que permite instruções de um nível mais alto se comunicar com componentes de baixo nível, prevenindo acesso direto ao hardware;
  • lsmod: Mostra ao usuário informações sobre os drivers ativos na máquina;

Mostrados estes comandos, seguiremos para nossa próxima definição.

Em sistemas Linux, um assunto deveras importante e que sempre é preciso atenção e pelo menos razoável entendimento este tema é sobre sistema de aquivos. Estes dados geralmente são arquivos especiais localizados em uma pasta específica e contém metadados(dados sobre dados) assim como também nos permitem manipular configurações a nível de kernel.

Discutiremos quatro termos que remetem a sistemas de aquivos, são eles: sysfs, udev, dbus, modprobe.

Sysfs – sistema de arquivos para exportar objetos do kernel

O sistema de arquivos sysfs é um pseudo sistema de arquivos que fornece uma interface para as estruturas de dados do kernel

Os arquivos sob o sysfs fornecem informações sobre dispositivos, módulos do kernel, sistemas de arquivos e outros componentes do kernel

O sistema de arquivos sysfs é comumente montado em / sys. Normalmente, ele é montado automaticamente pelo sistema, mas também pode ser montado manualmente usando um comando como:

Muitos dos arquivos no sistema de arquivos sysfs são somente leitura, mas alguns arquivos são graváveis permitindo que as variáveis do kernel sejam alteradas. Para evitar a redundância, os links simbólicos são muito usados para conectar entradas na árvore do sistema de arquivos

Udev

O udev fornece o software do sistema com eventos de dispositivo, gerencia permissões de nós de dispositivos e pode criar links simbólicos adicionais no diretório /dev ou renomeia as interfaces de rede

Links simbólicos significativos ou nomes de dispositivos de rede fornecem uma maneira de identificar com segurança dispositivos baseados em suas propriedades ou configurações atuais.

dbus

O dbus é um sistema de bus de mensagens, uma forma simples de as aplicações se comunicarem entre si

Além da comunicação entre processos, o dbus ajuda a coordenar o ciclo de vida do processo; Isso torna simples e confiável o código de um aplicativo ou daemon de “instância única” e o lançamento de aplicativos e daemons sob demanda quando seus serviços são necessários.

   E por último mas não menos importante.

modprobe

O modprobe adiciona e remove módulos do kernel do Linux. Módulos são pedaços de código que estendem a funcionalidade do kernel do sistema operacional sem a necessidade de reinicialização. O modprobe usa as listas de dependências e mapas de hardware gerados pelo depmod para carregar ou descarregar módulos de forma inteligente no kernel. Ele realiza a inserção e remoção reais usando os programas de nível inferior insmod e rmmod, respectivamente.

Dando continuidade ao nosso artigo, iremos comentar agora sobre inicialização do sistema, que abordará basicamente o desencadear das sequências de comandos iniciais.

INICIALIZAÇÃO DO SISTEMA

Todo sistema tem um start, um começo, um desencadear de comandos. É neste contexto que nossa discussão será continuada.

Em primeiro lugar, falaremos sobre o bootloader. Bootloader é o responsável por carregar o sistema operacional, ele direciona a máquina a acessar a trilha do sistema de arquivos em que está o SO. A BIOS lê os primeiros 512 bytes da mídia bootável e então a partir dali o sistema inicia. A mídia sustenta o boot loader e tabela de partição para o hardware enteder o que será processado e onde estão estocadas as informações necessárias para o funcionamento do sistema.

Disponível em ttps://opensource.com/article/18/1/analyzing-linux-boot-process

Acima está um resumo de como funciona a inicialização de sistema e algumas bibliotecas que são chamadas no processo.

Para tais ações, é necessário um controle do que é ou não executado, e é nesse momento que temos o SysVinit. O programa de inicialização do SysVinit lê o arquivo /etc/inittab para identificar a coleção de serviços que devem estar disponíveis quando o sistema atingir seu estado padrão (conhecido como o nível de execução padrão do sistema) e o comando que deve executar para atingir esse estado.

Outra opção de programa de inicialização que temos é o Systemd. Foi Desenvolvido por Leonard Poettering que é um programador alemão. O systemd é a mãe de todos os processos e é responsável por levar o host Linux a um estado no qual o trabalho produtivo pode ser feito.

O systemd monta os sistemas de arquivos conforme definido pelo /etc/fstab, incluindo quaisquer arquivos de swap ou partições. O processo faz uso de links simbólicos para facilitar ou pelo menos deixar mais direta as manipulações de comandos nesta etapa.

 Adicionando mais uma possibilidade de programa de inicialização ao nosso universo, eis aqui o Upstart. Introduzido no Fedora 9. Em contraste com o conjunto estático de scripts de inicialização usados em sistemas anteriores, o upstart system é acionado por eventos. Eventos podem ser acionados por alterações de hardware, iniciando ou parando ou tarefas, ou por qualquer outro processo no sistema.

Com tudo isso em mente, é bastante comum buscarmos o entendimento de cada passo de inicialização. Seja por curiosidade ou necessidade, podemos obter informações sobre acontecimentos nos logs de processos. Obtemos estas informações com o comando dmsg.

Outro tópico bastante importante quando se trata de sequência de boot são os níveis de execução. Níveis de execução definem quais tarefas podem ser realizadas no estado (ou nível de execução) atual de um sistema Linux. Cada sistema Linux suporta três níveis de execução básicos, mais um ou mais níveis para operação normal. Quando um sistema Linux é iniciado, o nível de execução padrão é determinado a partir da entrada id em /etc/inittab.

 Nível Propósito
0 Encerrar (ou parar) o sistema
1 Modo de usuário único; geralmente com os alias s ou S
6 Reinicializar o sistema

Tabela 1-Runlevels básicos do sistema Linux

 Nível Propósito
2 e 4 Definido pelo usuário
3 Usuários podem logar por múltiplos consoles ou via rede
5 Pode ter o mesmo propósito do nível 3, adicionado de interface gráfica

Tabela 2-Runlevels específicos de exemplos(Caso do Arch Linux)

É possível ainda alterarmos os níveis de execução. Há várias maneiras de alterar níveis de execução.

Para fazer uma alteração permanente, é possível editar /etc/inittab e alterar o nível padrão.

Se é necessário apenas iniciar o sistema em um nível de execução diferente para um único boot, é possível fazer isso também, mas depende da distribuição que se está utilizando, mas é descrito na documentação.

MODO DE USUÁRIO ÚNICO

Ao contrário de sistemas operacionais de computadores pessoais, como DOS ou Windows, o Linux é inerentemente um sistema de multiusuário.

Pode haver momentos nos quais isso é uma boa opção:

  • quando é necessário recuperar um importante sistema de arquivos de banco de dados
  • instalar e testar novo hardware

O nível de execução 1, ou modo de usuário único, é sua resposta para essas situações. A implementação real varia de acordo com a distribuição, mas geralmente se inicia em um shell com apenas um sistema mínimo.

Em alguns sistemas, é preciso autenticar fazendo login, mas em outros se vai direto para a linha de comando do shell como usuário raiz.

E com este tópico, encerro mais um artigo, espero que tenham ficado esclarecidos quanto aos temas abordados aqui e espero ter sido o mais incisivo possível na apresentação dos tópicos. Estarei aguardando vocês no próximo artigo.

Keep on Linux!

REFERÊNCIAS

https://github.com/torvalds/linux/blob/master/Documentation/filesystems/sysfs.txt
https://www.ibm.com/developerworks/linux/library/l-bootload/index.html
https://www.ibm.com/developerworks/library/l-lpic1-101-3/
https://www.ibm.com/developerworks/br/library/l-lpic1-v3-101-3/index.html
https://www.ibm.com/developerworks/library/l-customize-monitor-linux/index.html
http://man7.org/linux/man-pages/man5/sysfs.5.html
https://poweruphosting.com/blog/linux-hardware-info/
https://www.cyberciti.biz/faq/linux-list-hardware-information/
http://docs.ansible.com/ansible/latest/modprobe_module.html
https://www.linux.com/learn/sysadmin/viewing-linux-logs-command-line
https://wiki.archlinux.org/index.php/Systemd
https://github.com/gelec-ufc-sobral
https://www.computerhope.com/unix/modprobe.htm
https://www.freedesktop.org/wiki/Software/dbus/
https://www.computerhope.com/unix/modprobe.htm
http://processors.wiki.ti.com/images/a/a5/Sitara-linux-training-boot-delay.png
https://opensource.com/article/17/2/linux-boot-and-startup
https://opensource.com/article/18/1/analyzing-linux-boot-process

Instalação e personalização do ZSH

29/03/2018 Mateus Malveira , , , , , , >

O ZSH é um shell interativo que pode ser utilizado como um poderoso intérprete de linguagem de script que conta com grande  capacidade de ser configurado e personalizado.
Sua primeira versão foi criada em 1990 por Paul Falstad, que derivou esse nome do nome de seu professor Zhong Shao.

Vantagens

Converte o nome do processo em PID

Por exemplo, caso você queira forçar o encerramento de um processo como firefox. Ao digitar: kill fir<tab> o programa irá converter para número do seu PID (process id) correspondente.

Autocomplete Inteligente

Se o usuário digitar cd<tab> ele irá listar todas as pastas do diretório permitindo que você navegue por ele e escolha a pasta desejada. O mesmo funciona para o ls.

Histórico

Caso já tenha digitado um comando na sua máquina, quando o fizer novamente o zsh mostrará o início dele permitindo que você possa autocompletar.

Personalização

Através do framework oh-my-zsh, o zsh permite adicionar plugins, possibilitando uma maior personalização. Por exemplo, vejam o tema que eu utilizo em minha máquina.

Personalização

Primeiro instalamos o ZSH

Instalação ZSH

Linux Mint, Ubuntu e Debian

Arch Linux/Manjaro

Fedora/CentOS

Colocando o ZSH como shell padrão.

Instalando o Oh-my-ZSH

Via Curl

Via wget

Download do Tema powerlevel9k

Caso você não tenha o git instalado, basta instalá-lo através dos comandos.

Linux Mint, Ubuntu e Debian

Arch Linux/Manjaro

Fedora/CentOS

Download do Tema

Configurar Tema

Abra o seguinte arquivo com o seu editor, por exemplo o gedit.

No meu caso como utilizo o Linux Mint 18.3 o meu editor padrão é o xed, logo

Copie o seguinte conteúdo e substitua no arquivo aberto.

Altere a seguinte variável pelo nome do seu usuário.

E por fim, salve o arquivo.

Plugins

A maior vantagem do ZSH é a adição de Plugins, você pode adicioná-los através do arquivo editado anteriormente.

Procure pelo seguinte bloco:

Como pode ver, já adicionei alguns plugins interessantes.

  • git – provém muitos aliases funcionais para o git . Veja Mais
  • zsh-syntax-highlighting – Ajuda na revisão de comandos antes de executá-los, particularmente na captura de erros de sintaxe.
  • zsh-autosuggestions – Sugere comandos baseados no seu histórico.
  • dnf – Este plugin facilita a adição de aliases aos comandos mais comuns. Veja Mais

Existem vários plugins disponíveis. Veja neste link.

Personalizando o Terminal

Ainda no mesmo arquivo, procure a seguinte linha, que mostra os elementos que aparecem do lado esquerdo e direito do terminal, respectivamente:

Os seguintes elementos estão no lado esquerdo:

  • os_icon – Ícone do sistema operacional
  • dir – Diretório em que você se encontra
  • rbenv – Informações sobre o ambiente Ruby
  • vcs – Informações dos repositórios git ou hg

Já do lado direito estão os seguintes elementos:

  • status – Retorno do codigo anterior.
  • root_indicator – Indica se você está no modo superusuario (Root)
  • ram – Mostra o espaço livre na memória RAM.
  • time – O horário atual do sistema.

Existem diversos elementos que você pode adicionar. Como por exemplo:

  • ip – Retorna seu indereço de IP.
  • public_ip – Retorna o endereço de ip público.
  • battery – Retorna o status da bateria.
  • disk_usage – Uso do disco da sua partição atual.
  • ssh – Indica se você está ou não em uma sessão SSH.
  • swap – Indica o tamanho atual do Swap.
    Também existem elementos utilizados em linguagens de programação.
  • go_version – Mostra a versão atual do GO.
  • node_version – Mostra a versão atual do Node.js
  • php_version – Mostra a versão atual do php
    Caso você trabalhe com cloud também há opções disponíveis.
  • docker_machine – Conteiner atual do Docker.
    Existem diversas opções de customização confira aqui.

Alterar fonte do terminal

Caso você feche e abra o terminal, notará algo de estranho, vai parecer que está com algum bug, mas calma, só precisamos alterar a fonte utilizada.

Abra o terminal, clique em editar, preferencias do perfil. Em fontes, altere para HACK NF REGULAR

Pronto. Agora você tem um shell poderoso e personalizado.

 

Conceitos básicos de GNU/Linux

06/03/2018 Wesley Melo , , , , , , , , , >

Neste artigo trataremos um pouco sobre os conceitos básicos do GNU/Linux e um pouco de história do mundo do software livre.

LINGUAGEM C

Primeiramente precisamos falar sobre a linguagem C, ela é parte fundamental da história que será contada ao longo deste artigo.

C é uma linguagem de programação compilada de propósito geral, criada em 1972, por Dennis Ritchie, no AT&T Bell Labs, para desenvolver o sistema operacional Unix (que foi originalmente escrito em Assembly), é uma das linguagens mais populares e existem poucas arquiteturas para as quais não existem compiladores para C. Essa linguagem tem influenciado muitas outras linguagens de programação, especialmente no C++, que originalmente começou como uma extensão para C.

O kernel Linux é escrito numa versão da linguagem de programação C suportada pelo GCC (GNU Compiler Collection), que introduziu inúmeras extensões e mudanças ao C padrão, aliado a várias seções de código menores escritas na linguagem de montagem Assembly, na sintaxe e estilos do GCC e “AT&T”, da arquitetura alvo.

Devido às extensões suportadas pela linguagem C, o GCC foi por um longo período o único compilador capaz de compilar o Linux corretamente. Em 2004, a Intel disse ter modificado o Linux para que seu compilador C também pudesse compilá-lo.

O GCC é um conjunto de compiladores de linguagens de programação produzido pelo projeto GNU para construir um sistema operacional semelhante ao Unix. Sendo uma das ferramentas essenciais para manter o software livre, pois permite compilar o código-fonte em binários executáveis para as várias plataformas. É distribuído pela Free Software Foundation (FSF) sob os termos da GNU GPL, disponível para sistemas operativos UNIX-like e certos sistemas operacionais derivados como o Mac OS X.

Muitas outras linguagens foram usadas de algum modo, essencialmente em conexão com o processo de compilação, os métodos pelos quais as imagens inicializáveis são criadas através do código-fonte. Estas incluem Perl, Python, e várias linguagens shell script. Alguns compiladores podem até ser escritos em C++, Fortran, ou outras linguagens, mas isto é extremamente desencorajado. O sistema de compilação do Linux oficialmente suporta apenas o GCC, como um compilador de núcleo e controladores.

Programas em linguagem C podem ter sua alta performance melhor avaliada quando executam sem necessidade de entradas manuais. Isso ocorre em sistemas que executam em background onde, depois de executado, o programa processa as informações que lhe foram passadas ou as lê de um arquivo ou banco de dados. Assim, pode-se mensurar o tempo de execução deste programa escrito na Linguagem C, com um programa escrito em outra linguagem. Quanto menor for a interface com o usuário, melhor para se avaliar a performance do programa.

Por definição, a implementação do compilador da Linguagem C deve gerar um código de máquina bem similar à da Linguagem Assembly (baixo nível). Esta característica possibilita que a execução em Back-end tenha uma quantidade mínima de instruções necessárias para obter o resultado que foi determinado no código fonte.

SOFTWARE LIVRE

Por “software livre” devemos entender aquele software que respeita a liberdade e o senso de comunidade dos usuários. À grosso modo, isso significa que os usuários possuem a liberdade de executar, copiar, distribuir, estudar, mudar e melhorar o software. Assim sendo, “software livre” é uma questão de liberdade, não de preço. Para entender o conceito, pense em “liberdade de expressão”, não em “grátis”. Por vezes chamamos de “libre software” para mostrar que livre não significa gratis, pegando emprestado a palavra em francês ou espanhol para “livre”, para reforçar o entendimento de que não nos referimos a software como grátis.

Mais precisamente, software livre significa que os usuários de um programa têm as quatro liberdades essenciais:

  • A liberdade de executar o programa como quiser, para qualquer propósito (liberdade 0).
  • A liberdade de estudar como o programa funciona, e adaptar às suas necessidades (liberdade 1). Acesso ao código fonte é uma precondição para isso.
  • A liberdade de redistribuir cópias e assim você pode ajudar o próximo (liberdade 2).
  • A liberdade de melhorar o programa, e lançar suas melhorias ao público, assim toda a comunidade se beneficie (liberdade 3). Acesso ao código fonte é uma precondição para isso.

Desenvolvimentos em tecnologia e uso em rede tem tornado essas liberdades ainda mais importantes agora do que eram em 1983. Hoje em dia o movimento de software livre vai muito além de desenvolver o sistema GNU.

Projeto GNU

GNU é um sistema operacional livre – que é, o respeito à liberdade de seus usuários. O desenvolvimento do GNU tornou possível o uso de um computador sem um software que ameace sua liberdade.

Trata-se de um sistema operacional semelhante ao Unix (unix-like). Isso significa que é uma coleção de muitos programas: aplicativos, bibliotecas, ferramentas de desenvolvimento e até jogos. O desenvolvimento do GNU, que começou em Janeiro de 1984, é conhecido como Projeto GNU. Muitos dos programas em GNU são lançados sob auspícios do Projeto GNU; estes são chamados pacotes GNU.

O programa têm um sistema semelhante ao Unix que aloca recursos da máquina e conversa com o hardware, o chamado “kernel”. GNU é tipicamente usado com um kernel chamado Linux. Essa combinação é o Sistema Operacional GNU/Linux, que é usado por milhões de usuários, apesar de muitos o chamar somente de “Linux” por engano.

O kernel próprio do GNU, O Hurd, começou em 1990 (antes do Linux começar). Voluntários continuam desenvolvendo o Hurd porque ele é um projeto técnico interessante.

FSF – Free Software Foundation

A Free Software Foundation (FSF) é uma organização sem fins lucrativos com a missão mundial de promover a liberdade dos usuários de computador e defender os direitos deles.

O crescimento da nossa sociedade ocorre em conjunto ao aumento da nossa dependência de computadores, o software que executamos é de importância crítica para assegurarmos o futuro da nossa sociedade. Software Livre está relacionado à ter controle sobre a tecnologia que usamos em nossas casas, escolas e negócios, onde computadores trabalham em prol do nosso benefício e da comunidade, não para as companhias de software proprietário ou governos que às escondidas podem nos restringir e monitorar.

A Free Software Foundation trabalha para assegurar a liberdade dos usuários de computador ao promover o desenvolvimento e uso de software livre e documentado – particularmente os sistemas operacionais GNU – e a campanha contra ameaças à liberdade do usuário de computador como as Digital Restrictions Management (DRM) e patentes de software.

Ela mantém artigos históricos que cobrem a filosofia do software livre e mantém a definição de software livre – para mostrar claramente o que deve ser verdadeiro à respeito de um programa em particular para ser considerado software livre.

Além de patrocinar o projeto GNU também financia e promove importante desenvolvimento de software livre e provém sistemas de desenvolvimento para os mantenedores de software GNU e propiciar que voluntários possam facilmente contribuir para esse trabalho.

A FSF mantém copyrights de grande parte do sistema operacional GNU, e de outros softwares livres. Ela possui esses ativos para defender o software livre de esforços de transformá-lo em software proprietário.

E também publica a GNU General Public License (GNU GPL), a licença de software livre mais usada no mundo, e a única escrita com propósito expresso de promover e preservar a liberdade de software. Outras licenças importantes que ela pública é a GNU Lesser General Public License (GNU LGPL), a GNU Affero General Public License (GNU AGPL) e a GNU Free Document License (GNU FDL).

LICENÇA GNU/GPL

A GNU General Public License (GNU GPL ou somente GPL) é uma licença destinada à software livre usada largamente pelo mundo. Ela garante aos usuários finais a liberdade de executar, estudar, compartilhar e modificar o software. Essa licença foi redigida originalmente pelo próprio Richard Stallman para o projeto GNU. A GPL é uma licença do tipo copyleft, isso significa que um trabalho derivado de outro, só pode ser distribuído sob a mesma licença.

Historicamente, a família de licenças GPL tem sido uma das mais populares de licenças de software no campo de software-livre e aberto. Alguns projetos famosos que estão sob essa licença são o kernel Linux e o GCC (GNU Compiler Collection). Alguns estudiosos afirmam que o copyleft dessa licença foi crucial para o sucesso das distribuições Linux.

Atualmente a GPL encontra-se na sua terceira versão (GPLv3) que foi lançada em 2007 com o intuito de sanar alguns problemas identificados na segunda versão.

Versão 1

A Versão 1 da GNU GPL, lançada em 1989, previnil o que fosse então os dois principais meio de distribuição de software restrinja a liberdade que o software livre propunha.  O primeiro problema encontrado era o meio em que os publicadores podiam publicar publicar arquivos binários (somente executáveis, mas não legíveis por humanos). Então passou-se a exigir que fossem disponibilizadas versões legíveis do código-fonte disponibilizadas sob a mesma licença.

O segundo problema é que os distribuidores deveria adicionar restrições, para a licença ao combinar um software com outro de licença distinta. A união de dois conjuntos de restrições aplicadas num trabalho combinado, adicionando restrições inaceitáveis ao conceito de software-livre. Para prevenir isso, a GPLv1 definiu que versões modificadas de um software devem ser disponibilizadas sob a mesma licença.

Versão 2

De acordo com Richard Stallman, a maior mudança para a GPLv2 foi a cláusula “Liberdade ou Morte” chamada por ele assim.  Nessa versão, em sua 7a seção, diz que as licenças podem distribuir um trabalho coberto por GPL, somente se satisfizerem todas as obrigações exigidas por ela, apesar de qualquer outra obrigação legal que ela possa ter. Em outras palavras, não é possível distribuir um software sob licença GPLv2 quando o mesmo tem componentes patenteados.  

Por volta de 1990, a sensação aparente é que licenças menos restritivas seriam úteis estrategicamente para as bibliotecas escritas em C e bibliotecas que essencialmente cumpriam a mesma função de softwares proprietários; quando a segunda versão da GPL foi lançada em 1991, houve um consenso de que ambas as versões (GPLv1 e GPLv2) eram complementares. Até que em 1999 uma versão um pouco diferente foi lançada com o nome de LGPL (GNU Lesser General Public) que possibilitaria tornar, caso o desenvolvedor quisesse, “menos livre” o software.

Versão 3

No final de 2005, a FSF anunciou estar trabalhando na terceira versão da licença GPL.  E meses depois uma consulta pública foi realizada, resultando em quatro rascunhos da futura nova versão. A versão final e oficial foi lançada em meados de 2007. A GPLv3, foi escrita oficialmente por Richard Stallman.

De acordo com ele, as mudanças mais importante são em relação às patentes de software, licenças de software-livre e sua compatibilidade, a definição de código-fonte e restrições de hardware na modificação de software. As outras mudanças estão relacionadas à internacionalização, como lidar com a violação das licenças e como permissões adicionais seriam garantidas ao proprietário do copyright.

A licença GPLv3 melhora a compatibilidade com vários licenças de software open source como a licença Apache v2.0, e a licença GNU Affero General Public, como a GPLv2 não poderia ser combinada anteriormente.

MINIX

O termo Minix vem de Mini-Unix, é um sistema Unix-like baseado na arquitetura de Microkernel, ou seja, utiliza a menor quantidade de software possível para implementar um sistema operacional. As primeiras versões foram criadas por Andrew S. Tanenbaum, com propósitos educacionais. A primeira versão lançada oficialmente foi o Minix 3. O principal objeto deste sistema deixou de ser educacional e passou a ser desenvolver um SO altamente confiável baseado em Micro-kernel. Atualmente, o Minix é desenvolvido como um sistema operacional de código aberto. Seu lançamento ocorreu em 1987, com seu código fonte completo disponível para universidades.

Influência

Os princípios de design aplicados por Tanenbaum aplicou no Minix impactou fortemente nas decisões tomadas Linus Torvalds na criação do kernel Linux. Linus pôde usar usar e avaliar o Minix, mas o seu design desviou da arquitetura em modos significativos, o mais notável foi a utilização de um kernel monolítico ao invés de microkernel.

Em maio de 2004, Kenneth Brown acusou que a maior parte do kernel linux foi copiado da codebase MINIX, num livro chamado Samizdat. Essas acusações foram rebatidas fortemente especialmente pelo próprio Andrew Tanenbaum, embora tivesse tido grave desentendimento com Linus em 2001 quando Tanenbaum afirmou que o kernel monolítico do Linux o colocava em um patamar inferior ao Minix.

Licenciamento

À época do desenvolvimento, a licença do MINIX foi considerada um pouco liberal. Sua licença custou apenas 60 USD $ comparada aos outros sistemas operacionais. Apesar de Tanembaum quisesse que ele fosse o mais acessível possível para estudantes, seu publicador não estava preparado para oferecer um material (como código-fonte) que pudesse ser copiada livremente, então uma licença restritiva comum fosse aplicada (incluindo o preço do livro do Tanenbaum)  como um compromisso. Isso previnil o uso do Minix como base para um software distribuído livremente.

Quando os sistemas operacionais livre e open-source Unix-like como Linux e 386BSD foram disponibilizados no começo dos anos 90m, muitos desenvolvedores voluntários abandonaram o Minix em favor desses. Em 2000, o MINIX tornou-se gratuito e open source sob a licença Free Software Permissive.  

Kernel Linux

O kernel Linux é um kernel monolítico e open-source Unix-like. Ele foi concebido e criado em 1991 por Linus Torvalds para seu computador de uso pessoal sem intenções de permitir o cruzamento de plataformas, mas desde que expandiu o suporte à outras arquiteturas, rapidamente atraiu desenvolvedores e usuários que o adotaram como kernel para outro projetos de software livre e principal o mais notável é o projeto GNU.

O kernel linux tem recebido contribuições de mais de 12000 programadores ao redor do mundo de mais de 1200 companhias, incluindo gigantes empresas fabricantes de software e hardware. Cada versão recebe 6 anos de suporte e ele é publicado sob a licença GNU GPLv2 com alguns firmwares sob outras licenças.

Arquitetura

Como dito anteriormente, o kernel Linux é do tipo monolítico, ou seja todo o sistema operacional é executado num único espaço reservado ao kernel, ele é tido como uma interface alto-nível em relação ao hardware e os drivers de dispositivos externos são adicionados como módulos. Suporta multi-tarefas preemptivas, memória virtual, os pacotes de protocolos de internet, entre outras funções essenciais para o funcionamento do sistema operacional.

Podemos dizer que ele é tão próximo ao sistema operacional, que o sistema de gerenciamento de arquivos (FHS) é capaz de ler arquivos referentes à ele. Deve-se observar que o kernel não está ligado diretamente à interação de interfaces gráficas.

Programação

O kernel Linux foi escrito usando estruturas programadas na linguagem C e em Assembly. Durante anos Linus Torvalds foi questionado sobre o motivo de ter escolhido escrever o código em C ao invés de C++ com todas as suas qualidades. A resposta é que ele gostava mais da linguagem C porque segundo ele, era menos trabalhosa.

Segurança

Um outro diferencial é que devido ao fato de ser open-source e livre, qualquer pessoa pode identificar e consertar falhas de segurança, e publicá-las. Assim, devido à toda a comunidade Linux ter acesso ao código-fonte, caso alguém introduza uma falha em algum trecho do código, os desenvolvedores rapidamente identificam e consertam tais falhas. Isso ocorre também nas distros, quando uma falha é encontrada, rapidamente ela é sanada pela comunidade

Portabilidade

Embora não tenha sido concebido originalmente com foco na portabilidade, Linux é atualmente um dos kernels mais portados largamente, sendo executado no conjunto sistemas de arquiteturas distintas, desde arquiteturas ARM à arquiteturas específicas para mainframes.

A primeira vez em que o kernel Linux foi portado de sua arquitetura original (i386) para outra, ocorreu para um Motorola 68000, um processador da família CISC produzida pela Motorola. Entretanto as modificações foram tão profundas que Linus Torvalds viu como se a versão da Motorola fosse um fork de seu kernel.

Kernel Panic

No Linux, um “pânico” é um erro irrecuperável do sistema detectado pelo kernel, quando um erro ocorre, é possível que dependo doo código do kernel essa situação ao chamar  uma localizada em sys/system.h. Contudo, a maioria das panes são resultado erros de exceção do processador no código do kernel, como por exemplo, referência a um endereço de memória inválido. Contudo, o “kernel panic” pode indicar falhas de hardware, como super-aquecimento, falhas na memória RAM, etc.

Um erro não-fatal no kernel é chamado de “oops”, tal desvio do comportamento correto do kernel, pode permitir a continuidade da operação com relativa confiabilidade. Essas falhas são reportadas automaticamente e podem transmitidas para desenvolvedores do kernel (também conhecidos como kerneloops.

Sistema Operacional GNU/Linux

O GNU foi lançado por Richard Stallman em 1983, como um sistema operacional que seria reunido por pessoas que trabalham juntas pela liberdade de todos os usuários de software para controlar sua computação.

O objetivo principal e contínuo do GNU é oferecer um sistema compatível com o Unix que seria 100% software livre.  O nome do sistema, GNU, é um acrônimo recursivo que significa “GNU’s Not Unix” (em português, “GNU Não é Unix”) — uma maneira de homenagear as ideias técnicas do Unix, enquanto ao mesmo tempo diz que o GNU é algo diferente. Tecnicamente, o GNU é como o Unix. Mas, ao contrário do Unix, o GNU dá liberdade a seus usuários.

Distribuições de sistema totalmente livre (“distros”) que atendem a este objetivo estão disponíveis hoje, muitas usando o kernel Linux. Os pacotes GNU foram criados para trabalhar em conjunto de forma que possamos ter um sistema GNU funcional. Descobriu-se que eles também servem como um “upstream” comum para muitas distros, então contribuições para pacotes GNU ajudam a comunidade de software livre como um todo. O trabalho no GNU está em andamento, com o objetivo de criar um sistema que dê a maior liberdade aos usuários. Os pacotes GNU incluem aplicativos orientados a usuários, utilitários, ferramentas, bibliotecas e até jogos

Milhares de pessoas se juntaram para tornar o GNU o sucesso que é hoje, Os desenvolvedores do GNU se reúnem de tempos em tempos em GNU Hackers Meetings (“Reuniões de Hackers do GNU”), às vezes como parte das conferências do LibrePlanet, a maior comunidade de software livre.

O GNU sido apoiado de várias maneiras pela Free Software Foundation, a FSF aceita atribuições de copyrights e isenções de responsabilidade, para que possa atuar no tribunal em nome dos programas GNU. Contribuir com um programa para o GNU, não exige a transferência do copyright para a FSF. Se você atribuir o copyright, a FSF aplicará a GPL para o programa se alguém violá-la; se você mantiver o copyright, a aplicação dependerá de você.

Distribuições GNU/Linux

Uma distribuição Linux, também chamada de distro é um sistema operacional composto por um conjunto de softwares baseados no kernel Linux e quase sempre um sistema gerenciador de pacotes. Existem as mais variadas distribuições com as mais variadas aplicações, que vão desde dispositivos embarcados até grandes clusters de processamento.

Tipicamente é composta pelo kernel Linux, ferramentas GNU, bibliotecas open-source, documentação, um sistema gráfico baseado em janelas (geralmente X Window System) e um ambiente de área de trabalho. É possível que os desenvolvedores da distro incluam softwares proprietários cujo código fonte não fica disponível.

Os softwares de terceiros são normalmente adaptados e então empacotadas pelos mantenedores da distribuição. Os pacotes são disponibilizados online em repositórios, que são locais de armazenamento distribuídos ao redor do mundo  acessados via internet pelos gerenciadores de pacotes.

Existem cerca de 600 distribuições Linux, mas quase 500 delas foram descontinuadas. Devido à grande variedade e disponibilidade de software, tais distribuições alcançaram uma grande variedade de formas, incluindo desde a utilização em desktops, servidores a dispositivos wearables e IoT (Internet of Things).

Há distribuições mantidas por entidades comerciais, como Fedora (Red Hat), openSUSE (SUSE) e Ubuntu (Canonical), assim como existem distribuições mantidas completamente pela comunidade de usuários e desenvolvedores como Debian, Slackware, Gentoo e Arch Linux. A maioria das distribuições chegam ao usuário final prontas para o uso e pré-compiladas para uma conjunto específico de atividades, enquanto algumas distribuições (como Gentoo) são distribuídos principalmente através de seu código-fonte e compilado localmente durante a instalação.

Usuário foram atraídos por distribuições Linux como alternativas ao DOS e ao Microsoft Windows presente nos PCS das famílias IBM, Mac OS do Apple Macintosh, e as versões proprietárias do Unix.

Originalmente, a distribuição eram apenas uma conveniência, oferecendo uma alternativa ao às versões proprietárias do Unix mas ocasionalmente se tornou uma escolha comum aos usuários Unix e Linux.   

Á princípio, Linux tornou-se mais popular em servidores e dispositivos embarcados do que no mercado de desktop; Atualmente, o Linux está presente em mais da metade dos servidores web do mundo.

Muitas distribuições estão disponibilizadas para o usuário através de um sistema auto-gerenciável de seus pacotes que atuam durante a instalação do sistema operacional, por outro lado certas distribuições como o Gentoo, entregam ao usuário  somente os binários, um kernel básico, ferramentas de compilação e um instalador que compilará os software de acordo com a arquitetura da máquina.

Gerenciamento de Pacotes

Um pacote geralmente é disponibilizado como  código previamente compilado e um instalação/remoção automatizados, diferente de um simples ficheiro de arquivos, um pacote contém regras definidas para mover arquivos para seu correto local além de permissão para criar, excluir entre outras ações com os arquivos.

Cada pacote instalado contém meta-informações como descrição, versão  e dependências. Podemos definir dependências como pacotes essenciais que devem ser instalados previamente para que possa instalar outro. O gerenciador de pacotes é capaz de analisar o pacote a ser instalado e posteriormente atualizá-lo.

Normalmente após a instalação de um pacote não é necessário que o administrador tome medidas adicionais, mas em casos especiais às vezes é necessário que o usuário faça configurações distintas para que o software instalado tenha permissões de acesso necessárias.

Ao invés de utilizar um pacote pré-compilado é possível que um software seja instalado através de seu código-fonte, após sua compilação, o usuários poderá instalar onde desejar.

Tipos de Distros

No geral as distribuições podem ser dos seguintes tipos:

  • Comercial e não-comercial;
  • Desenvolvido especialmente para empresas, heavy users ou usuários domésticos;
  • Suportado em múltiplos tipos de hardware, ou em plataformas específicas;
  • Desenvolvidos para servidores, desktops e dispositivos embarcados;
  • De propósito geral ou altamente especificado para funcionalidades específicas na máquina como firewall;
  • Com público alvo em grupos específicos de usuários, como uso científico ou artístico;
  • Construído primariamente para segurança, usabilidade, portabilidade, etc.

Android e distribuições não-GNU

Apesar do Android ser contado como uma distribuição por definição. Ele usa o kernel Linux, contudo ele utiliza bibliotecas proprietárias pertencentes ao Google. Apesar disso, ele é tão linux quanto às distribuições GNU. Outros exemplos de distribuições não-GNU, são o Cyanogenmod e seu fork, o LineageOS, Android-x86 e recentemente o Tizen.

Iniciativas brasileiras

Ao longo dos anos várias iniciativas brasileiras de produzir distros nacionais, no início dos anos 2000, a distribuição mais famosa foi o Linux Kurumin, e o mesmo teve várias distribuições derivadas. A maioria das distribuições nacionais foi descontinuada, porém uma delas voltou à ativa recentemente, o BigLinux, que está na sua versão 7.0. Abaixo estão listadas algumas outras iniciativas brasileiras.

 

Nome Status
GoboLinux versão 16.01
DizinhaLinux descontinuado
Linux Kurumin descontinuado
BigLinux versão 7.0
KalangoOS descontinuado
Metamorphose Linux versão 7.1 – Tiger
Linuxfx ctOS versão 7.4.2
Fenix SO versão 3.16
Duzero OS versão 3.0

FHS

O Filesystem Hierarchy Standard (FHS) define a estrutura de diretórios e seus conteúdos na distribuições GNU/Linux. Essa especificação é mantida pela Linux Foundation e a sua versão mais recente (3.0) foi lançada em junho de 2015 e sua primeira versão data do início de 1994

No FHS todos os arquivos e diretórios se encontram sob o diretório raiz (representado por /). Mesmo que estejam armazenados em dispositivos diferentes, sejam físicos ou virtuais.

/ É o diretório raiz do sistema, em que a partir dele podemos acessar os demais diretórios.
/bin Binários essenciais para comandos básicos
/boot Arquivos de Bootloaders, como kernel e initrd
/dev Os arquivos desse diretório permitem acesso ao hardware do computador
/etc Armazena configurações do sistema
/home Contém os arquivos pessoais do usuário
/lib Armazena bibliotecas compartilhadas necessárias para execução do sistema e de outras aplicações
/media Permite acesso a outras partições do computador e dispositivos de armazenamento removível como pendrives e HDs externos.
/mnt
/opt Armazena pacotes de softwares instalados pelo usuário
/proc Os arquivos desse diretório permitem acessarmos informações oriundas do kernel e processos ligados diretamente à ele.
/sys
/run Armazena dados de variáveis em tempo de execução
/sbin Também armazena arquivos essenciais, porém só podem ser executados pelo usuário root.
/root Atua como se fosse um diretório /home restrito ao usuário root
/tmp Armazena arquivos temporários que não são preservados após o reboot
/usr Unix System Resources armazena a maior parte dos arquivos instalados, incluindo executáveis, bibliotecas, código-fonte e até mesmo documentações.
/var No geral armazena arquivos que são modificados com frequência.

MODALIDADES

  • Modalidades (Rolling Release e Stable)

Quando uma versão de uma distribuição GNU/Linux carrega a marca Rolling Release, significa que ela contém as versões mais recentes de seus componentes, e recebe atualizações em um menor espaço de tempo, todavia o usuário deve ficar atento à possíveis instabilidades na execução do sistema operacional.

Por outro lado, quando se trata de uma versão Stable, significa que aquela versão contém componentes estáveis, ou seja, que foram testados à exaustão previamente e seu comportamento é tido como mais estável.

Assim, a maioria dos mantenedores das distribuições oferecem um suporte maior às versões Stable do que para as versões Rolling Release. Como exemplo, podemos citar a Canonical que oferece 5 anos de suporte para o Ubuntu em versão estável (lá chamado de LTS – Long-term Support) enquanto a versão Rolling Release recebe apenas 9 meses de suporte.

PRINCIPAIS DISTROS

(Mais usadas e conhecidas)

As principais distribuições são:

  • Debian;
  • Slackware
  • RHEL
  • SUSE
  • Arch Linux

E as mais usadas são:

  • Ubuntu
  • Mint
  • openSUSE
  • Fedora

Abaixo você encontra a apresentação vista no encontro de 05/03/2018 e o material de apoio utilizados:

 

O nosso Linux de cada dia

19/02/2018 Tuxpilgrim

Como primeiro post desse projeto, trago minha experiência com sistemas linux. Algumas pessoas sempre perguntam sobre o porquê de utilizar esse sistema, e não o famigerado Windows de cada dia. Pra isso alguns pontos merecem destaque:

1. Segurança

Um dos pontos mais importantes, visto que estamos em uma era onde informação é tudo, então nada melhor que começar na nossa máquina. Importante ressaltar que nenhum sistema é totalmente seguro, o usuário tem um papel fundamental nisso também. Como o linux te dá acesso a funções internas do sistema, é possível encontrar a melhor maneira de configurá-lo.

2. Poder

Um ponto muito importante, no linux você tem a opção de desinstalar o kernel se assim quiser(vai saber né), isso mostra que o usuário é REALMENTE o administrador da sua máquina, tornando assim as modificações no sistema totalmente possíveis, desde uma troca de lugar da barra do painel de ferramentas até uma instalação de um módulo diretamente no kernel. Mas como já foi falado isso tudo depende do usuário, como já dizia o Tio Ben:

Com grandes poderes vem grandes responsabilidades.

3. Comunidade

Um dos pontos considero mais importante quando se fala de linux. O linux é movido pela comunidade, correção de bugs, implementação de novas ferramentas, how tos, e outras muitas formas. Um grupo de pessoas espalhadas pelo mundo inteiro sempre dispostas a ajudar, a gastar o seu tempo com algo que gostam, isso é incrível. Sempre vai ter alguém disposto a ajudar caso queira começar a estudar alguma distribuição linux, fóruns, grupos em redes sociais, eles vão estar lá, em toda parte.

3. Facilidade

Por mais que muitos discordem, linux é um sistema fácil, a maioria dos softwares de manutenção são dispensáveis quando se fala dele. E o melhor, como é totalmente personalizavel, tem linux pra todos os gostos, desde os usuários que só precisam acessar o navegador e o editor de texto, até o desenvolvedor que está fazendo a skynet.

Existem outros muitos pontos que podem ser falados e aprofundados, aqui somente citei alguns que me ajudaram a escolher esse sistema como meu principal, o Mundo Linux é bem maior que isso!

Eventos


2 º Encontro Presencial

26/03/2018 Sobral, CE


[Palestra] Introdução ao Linux

02/03/2018 Sobral, CE


[Evento] FLISOL 2018

28/04/2018 Sobral, CE


Outros Projetos