sábado, 19 de outubro de 2024

criar windows botavel usando linux

0 comentários

mkdir /mnt/windows-iso

sudo mount -o loop caminho-da-iso-windows.iso /mnt/windows-iso

mkdir ~/windows-files

cp -r /mnt/windows-iso/* ~/windows-files/

sudo umount /mnt/windows-iso

 adicionar o ppa :

https://launchpad.net/~brandonsnider/+archive/ubuntu/cdrtools


sudo add-apt-repository ppa:brandonsnider/cdrtools
sudo apt update

instalar o sudo apt install mkisofs
depois os comandos:

gerar a iso

mkisofs -iso-level 3 -udf \
  -b boot/etfsboot.com -no-emul-boot -boot-load-size 8 -boot-info-table \
  -o ../windows-custom.iso ~/windows-files

gravar no poendrive
sudo dd if=../windows-custom.iso of=/dev/sdX bs=4M status=progress oflag=sync




Continue reading →
quinta-feira, 26 de setembro de 2024

Configurando 2 contas de Git no mesmo computador

0 comentários

 Fonte: https://willianjusten.com.br/configurando-2-contas-de-git-no-mesmo-computador


Aprenda como configurar uma conta pessoal e uma conta da empresa no Git, incluindo chaves SSH e emails.

Introdução

Fala povo, recentemente eu voltei ao mercado de trabalho para trabalhar numa startup chamada Zapt e consequentemente precisei configurar o Git da minha máquina para não usar somente o meu email pessoal, mas também o da empresa, principalmente porque lá utilizam o GitLab ao invés do GitHub, então ele é mais chatinho para reconhecer os emails e chaves SSH.

É bem simples de configurar, mas percebi que muita gente não sabe como fazer da mesma maneira que eu faço, então resolvi escrever esse post rapidinho para ensinar. Lembrando que os processos descritos abaixo funcionam no Linux, Mac e Windows com WSL, no Windows puro algumas outras configuração seriam necessárias, mas não irei abordar aqui.

Enquanto eu vou escrevendo esse post vou ouvindo Pitty, isso mesmo, aquela rockeira baiana que era bem famosa nos 2000, como já disse, escuto de tudo xD

Por que configurar o Git e como fazer?

Antes mesmo de começar a falar de SSH e etc, a gente precisa falar a razão de configurar o Git num é mesmo? Bom, quando nós criamos um commit, ao ver no log, ele fica numa estrutura similar a essa:

commit 82a24142b6df8049787760c82d29728f8fb0eee5 (HEAD -> master, origin/master, origin/HEAD)
Author: Willian Justen de Vasconcellos <willianjustenqui@gmail.com>
Date:   Sun Sep 5 23:31:04 2021 -0300

    Remove dangerously to use Script

Se você notar, tem uma parte separada especificamente para o Author. Se você não configurar, o Git vai pegar o que tiver de informação no computador e na maioria das vezes ele não vai colocar direito nem o nome e muito menos o email.

Para configurar uma conta única e global é super simples, basta digitar:

git config user.name --global "Willian Justen de Vasconcellos"
git config user.email --global "willianjustenqui@gmail.com"

Mas e se precisar mudar para o email da empresa no projeto X? A forma não automatizada é dentro do projeto definir manualmente:

git config user.name "Willian Justen de Vasconcellos"
git config user.email "will.justen@zapt.com.br"

E aí talvez você pergunte:

Mas e se tiverem vários projetos da empresa, preciso fazer isso em cada projeto?

A resposta antes desse post seria que sim, você precisa definir manualmente. Mas como vocês sabem, programador é bicho preguiçoso e sempre vai querer automatizar as coisas e bom, é o que faremos xD

Configurando diferentes emails

Quando o Git vai assinar um commit ele primeiro procura as informações dentro da pasta .git dentro do projeto e caso não tenha nada definido localmente, ele procura pela configuração global que fica num arquivo chamado .gitconfig na pasta raiz do usuário.

E é aqui que iremos fazer uma jogada para o Git ler o que nós queremos que ele leia. Eu costumo ter uma estrutura de pastas da seguinte forma:

~/Development
   /github # meus projetos pessoais
   /zapt # projetos da zapt

Como é um padrão bem simples, fica fácil de falar para o Git o seguinte:

  • Se estiver na pasta github use meu email pessoal
  • Se estiver na pasta zapt use o email da empresa

E aí para definir isso, eu crio 2 arquivos:

  • .gitconfig-github
  • .gitconfig-zapt

E os conteúdos ficam:

# .gitconfig-github

[user]
  email = willianjustenqui@gmail.com

E no outro:

# .gitconfig-zapt

[user]
  email = will.justen@zapt.com.br

Lembrando que aqui estou mostrando só o email, mas outras configurações como aliases específicos para cada conta e qualquer outra coisa, você consegue separar tranquilamente nesses arquivos.

Mas só fazendo isso, ainda não vai funcionar, nós precisamos informar ao Git quando é parar ler um ou outro, para isso nós editaremos o .gitconfig original para ficar assim:

[user]
  name = Willian Justen de Vasconcellos
[init]
  defaultBranch = main

[includeIf "gitdir:~/Development/github/"]
  path = .gitconfig-github
[includeIf "gitdir:~/Development/zapt/"]
  path = .gitconfig-zapt

Note que eu tenho coisas globais ainda, como meu nome e o branch inicial quando criar. Mas utilizo um includeIf exatamente para quando cair numa opção ou outra, ele adicionar meus dados específicos. Só de fazer isso, se eu criar um commit na Zapt, já ficaria com o commit assim:

commit e07164f972a15bbf7c681970a5cf547db966867d (origin/fix/update-map-use-lat-long, fix/update-map-use-lat-long)
Author: Willian Justen de Vasconcellos <will.justen@zapt.com.br>
Date:   Thu Aug 26 12:16:44 2021 -0300

    Fix Map position to use flat lat and long

Como podem ver, o email já fica certinho o da empresa e não o meu pessoal.

Configurando duas chaves SSH

Agora vamos a segunda parte que é ainda mais importante, afinal de contas, se as chaves não estiverem bem configuradas, você não consegue nem fazer push para o repositório.

Primeiro de tudo, você precisa criar chaves SSH separadas, até para facilitar nessa separação, para isso, é só rodar:

ssh-keygen -t rsa -C "email@pessoal.com" -f "id_rsa_pessoal"
ssh-keygen -t rsa -C "email@trabalho.com" -f "id_rsa_trabalho"

Ao fazer isso, ele vai criar duas chaves separadas na pasta ~/.ssh, depois basta adicionar na sua máquina usando:

ssh-add ~/.ssh/id_rsa_pessoal
ssh-add ~/.ssh/id_rsa_trabalho

Depois disso precisamos configurar o ssh para também entender quando usar uma chave ou outra. Para isso vamos criar um arquivo config dentro da pasta .ssh:

cd ~/.ssh
touch config
code config # você pode usar vi, vim, nano, enfim, editor favorito

Lá dentro do arquivo é só editar:

# Conta pessoal como default
Host github.com
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_pessoal
   
# Conta do trabalho
Host github.com-trabalho  
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_trabalho

Ali está como github, mas para o gitlab é só mudar no Host e Hostname, você inclusive pode ter diferentes configs de diferentes repositórios remotos no mesmo arquivo.

E aí, sempre que for clonar um repositório, se ele for de trabalho, basta editar na url para ficar de acordo com a estrutura acima:

git clone git@github.com-trabalho:seu_user/repo_name.git

Prontinho, agora sua máquina está configurada para trabalhar com duas contas do Git e assim você não fica misturando usuários e chaves entre coisas pessoais e empresa!

Continue reading →
quarta-feira, 20 de março de 2024

Como baixar pacotes DEB com dependências localmente

0 comentários

 Fonte: https://www.edivaldobrito.com.br/como-baixar-pacotes-com-dependencias-localmente-no-debian-ubuntu-e-derivados/


Se você precisar dos pacotes de instalação de um programa, mas não quer instalar ele, veja como baixar pacotes deb com dependências localmente no Debian, Ubuntu e derivados.

Neste tutorial, você verá como baixar um pacote .DEB, juntamente com todas as dependências necessárias, sem realmente instalá-lo.

Como baixar pacotes deb com dependências localmente no Debian, Ubuntu e derivados
Como baixar pacotes deb com dependências localmente no Debian, Ubuntu e derivados

Usando este método, podemos baixar pacotes de um sistema e instalá-los mais tarde no mesmo sistema ou em qualquer outro, que não tenha conexão com a Internet.

Também é possível fazer o download de pacotes para diferentes sistemas de arquitetura. Por exemplo, você pode baixar os pacotes de 32 bits a partir de um sistema de 64 bits e vice-versa.

Para saber mais sobre esse programa, acesse essa página.

Como baixar pacotes deb com dependências localmente no Debian, Ubuntu e derivados

Para baixar localmente pacotes com dependências no Debian, Ubuntu e derivados, você pode um dos métodos abaixo.

Como baixar pacotes com dependências localmente no Debian, Ubuntu e derivados – Método 1

Este é o método mais simples e direto. Execute o comando abaixo para baixar um pacote com todas as dependências sem instalá-las (substitua ‘nomepacote’ pelo nome do pacote):

sudo apt-get install --download-only nomepacote

Todos os arquivos baixados serão salvos na pasta /var/cache/apt/archives. Basta copiar toda a pasta de cache em qualquer pendrive ou transferi-los via rede para qualquer sistema onde você deseja instalar os pacotes.

Para instalar os pacotes baixados, vá para a pasta de cache e instale-os, usando o comando abaixo:

sudo dpkg -i *

Como baixar pacotes com dependências localmente no Debian, Ubuntu e derivados – Método 2

Nesse método, primeiramente você baixa as dependências do programa que precisa. Para exibir a lista de todas as dependências de um pacote, por exemplo, Python, execute:

sudo apt-cache depends python

A saída será mais ou menos assim:

python
PreDepends: python-minimal
Depends: python2.7
Depends: libpython-stdlib
Conflicts: 
Breaks: update-manager-core
Suggests: python-doc
Suggests: python-tk
Replaces: python-dev

Agora, você deve fazer o download do pacote python com suas dependências para o disco local. Para fazer isso, primeiro crie uma pasta para salvar os pacotes.

mkdir python

Depois, acesse a pasta criada:

cd python

E então execute o seguinte comando:

for i in $(apt-cache depends python | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/''/''/); do sudo apt-get download $i 2>>errors.txt; done

O comando acima irá baixar o pacote Python juntamente com todas as dependências necessárias e salvá-los no diretório de trabalho atual. Este comando também salvará quaisquer erros no arquivo errors.txt.

Você pode notar que o comando acima baixou os pacotes de 64 bits. É porque estou baixando-os do sistema Ubuntu de 64 bits. E se você quiser baixar pacotes para sistemas de arco de 32 bits? Também é possível.

Primeiro, habilite a arquitetura que deseja no seu sistema Ubuntu usando o comando:

sudo dpkg --add-architecture i386*

Após habilitar a arquitetura de sua escolha, execute o seguinte comando para baixar pacotes relacionados à arquitetura específica.

for i in $(apt-cache depends python:i386 | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/''/''/); do sudo apt-get download $i 2>>errors.txt; done

Se quiser listar os arquivos baixados use o comando ‘ls’ e saída será algo assim:

cd pythonerrors.txt
libpython-stdlib_2.7.11-1_amd64.deb
python2.7_2.7.11-7ubuntu1_amd64.deb
python-doc_2.7.11-1_all.deb
python-minimal_2.7.11-1_amd64.deb
python-tk_2.7.11-2_amd64.debcode>

Como é possível ver na saída acima, o pacote python foi baixado, junto com todas as suas dependências.

Agora, basta copiá-los para sua unidade USB e instalar os pacotes python em qualquer sistema off-line.

Ou seja, apenas monte a unidade USB, vá para o local onde você montou a unidade e execute o seguinte comando para instalar o Python.

sudo dpkg -i *

Agora que você já sabe como fazer o download de pacotes com dependências localmente nos sistemas Debian, Ubuntu, Linux Mint e outros derivados, fique a vontade para baixar e instalar onde quiser, e quando quiser. E viva a liberdade!

Continue reading →
terça-feira, 23 de janeiro de 2024

Exportando automaticamente unidades USB pelo Samba

0 comentários

 Fonte: Exportando automaticamente unidades USB pelo Samba | davidc.net


Para o meu novo NAS, eu queria que os discos USB recém-conectados fossem montados automaticamente e, em seguida, exportados pelo Samba. O programa usbmount do Debian é usado para lidar com a montagem, e alguns scripts lidam com a exportação do Samba.

USBMauricular

O Debian tem o pacote usbmount disponível, um programa prático que roda independente de qualquer GUI. udev chama-o quando um disco USB é inserido, e usbmount monta o disco automaticamente. Ele também executa quaisquer scripts em /etc/usbmount/mount.d usando run-parts (e o equivalente /etc/usbmount/umount.d após a desconexão). Isso permite que um script personalizado seja inserido para manipular a exportação do Samba.

usbmount por padrão será montado nos diretórios /media/usb0 até /media/usb7.

smb.conf

Eu não queria editar o smb.conf diretamente. O Samba tem uma diretiva de inclusão - não permite que você inclua um diretório, mas ignora silenciosamente todos os arquivos de inclusão que não existem.

Crie o diretório vazio /etc/samba/auto e adicione as seguintes linhas à parte inferior do smb.conf:

include = /etc/samba/auto/usb0.conf
include = /etc/samba/auto/usb1.conf
include = /etc/samba/auto/usb2.conf
include = /etc/samba/auto/usb3.conf
include = /etc/samba/auto/usb4.conf
include = /etc/samba/auto/usb5.conf
include = /etc/samba/auto/usb6.conf
include = /etc/samba/auto/usb7.conf

mount.d

Em seguida, um script para criar automaticamente os arquivos de configuração acima quando uma unidade é inserida. Crie o arquivo /etc/usbmount/mount.d/50_add_samba_export com o seguinte conteúdo e chmod executável.

#!/bin/bash
SHARENAME=`basename $UM_MOUNTPOINT`
cat > /etc/samba/auto/$SHARENAME.conf <<EOF
[$SHARENAME]
   comment = $UM_VENDOR $UM_MODEL
   path = $UM_MOUNTPOINT
   read only = no
EOF
 
/etc/init.d/samba restart

Obviamente, você pode colocar qualquer coisa que quiser no fragmento do arquivo de configuração para configurar o compartilhamento da maneira que desejar.

Note que eu forço um reinício do Samba, em vez de um reload. Isso depende de você - uma recarga não interromperá as conexões existentes, mas significará que os usuários terão que se desconectar e se reconectar para ver o novo compartilhamento. Uma reinicialização interromperá brevemente as conexões, mas permitirá que elas vejam o novo compartilhamento imediatamente. Escolha o que funciona melhor para você.

umount.d

Crie um script semelhante para remover o compartilhamento quando o disco for desmontado ou removido. Isso vai em /etc/usbmount/umount.d/50_remove_samba_export - novamente, lembre-se de chmod ele +x.

#!/bin/bash
SHARENAME=`basename $UM_MOUNTPOINT`
rm -f /etc/samba/auto/$SHARENAME.conf
 
/etc/init.d/samba restart

Novamente, escolha se deseja recarregar ou reiniciar.

Arrumação final

Se a máquina for reinicializada sem desmontar corretamente, os compartilhamentos aparecerão novamente, mesmo que a unidade não esteja mais conectada. Para lidar com essa eventualidade, crie um script de inicialização para limpar o /etc/samba/auto.

Como o Debian gentilmente removeu o recurso rc.boot do administrador local, você tem que fazer isso da maneira complicada usando um script init, digamos /etc/init.d/auto-share-clean

#! /bin/sh
### BEGIN INIT INFO
# Provides:          auto-share-clean
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Cleans auto samba shares
### END INIT INFO
 
rm -f /etc/samba/auto/*

Em seguida, chmod +x /etc/init.d/auto-share-clean e update-rc.d auto-share-clean padrões.

Outros trabalhos

Provavelmente há algo inteligente que pode ser feito aqui com o UUID e a nomenclatura persistente - ou seja, exportar o compartilhamento com um nome que seja persistente em reinicializações/reconexões. Por exemplo, com duas unidades USB conectadas, qual unidade é montada primeiro pode variar, o que não é ótimo para nomes de caminho de rede persistentes.

Continue reading →