BEM VINDO AO BLOG DO MARCOS CARRARO CRIADOR DO "CARRARO DASHBOARD". MUITO MAIS QUE UM SIMPLES BLOG.

quinta-feira, 16 de julho de 2015

Automatizando a instalação do Debian Jessie 8.1 com preseed

Buenas,

Mudando um pouco, já que o Centos ainda não esta dando suporte a ARM, esta consumindo muito recurso quando preciso poupar os mesmos (Tem projeto nascendo) então como na vida muitas vezes temos pequenos desvios...

Neste caso vamos ver como automatizar a instalação do Debian Jessie, porém o usuário somente particiona o disco, o restante é feito automaticamente.

Para isso, vamos baixar a ISO original ~650mb
# cd ~
# wget http://cdimage.debian.org/debian-cd/8.1.0/amd64/iso-cd/debian-8.1.0-amd64-CD-1.iso

Montar a ISO para poder copiar os arquivos
# mount -o loop debian-8.1.0-amd64-CD-1.iso /mnt
# mkdir ~/iso
# rsync -a -H --exclude=TRANS.TBL /mnt/ ./iso

Alterando o isolinux.cfg para iniciar a instalação automaticamente e carregar o arquivo preseed.cfg
# vim iso/isolinux/isolinux.cfg
O conteúdo do arquivo é este

default install
prompt 1
timeout 240
display message.txt
F1 message.txt

label install
    menu label ^Instalacao Servidor
    linux /install.amd/vmlinuz
    initrd /install.amd/initrd.gz
    append cdrom-detect/try-usb=true preseed/file=/cdrom/preseed.cfg locale=en_US keyboard-configuration/xkb-keymap=br-abnt2 languagechooser/language-name=English  countrychooser/shortlist=US DEBCONF_DEBUG=5 video=vesa:ywrap,mtrr vga=788 --- quiet

No arquivo message.txt no diretório iso/isolinux/message.txt é o texto que sera mostrado quando o CD iniciar seu boot..


Criando o arquivo preseed.cfg com o seguinte conteudo, esta dividido em grupos de configuração, praticamente ele é auto descritivo.

### USO GERAL
debconf debconf/priority string critical
unknown debconf/priority string critical
d-i debconf/priority string critical

### TECLADO E IDIOMA
d-i console-keymaps-at/keymap select br-abnt2
d-i debconf/language string en_US
d-i languagechooser/locale string en_US

d-i debian-installer/keymap select br-abnt2
d-i debian-installer/language string en
d-i debian-installer/locale string en_US

## OPERACOES COM O CD
d-i cdrom-checker/start boolean false
d-i cdrom-detect/load_media boolean false

### REDE
#d-i netcfg/link_wait_timeout string 1
#d-i netcfg/dhcp_timeout string 1
d-i netcfg/use_dhcp false
d-i netcfg/disable_dhcp boolean true
d-i netcfg/dhcp_failed note
d-i netcfg/choose_interface select eth0
d-i netcfg/hostname string servidor1
d-i netcfg/get_ipaddress string 10.10.10.1
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 10.10.10.1
d-i netcfg/get_nameservers string 10.10.10.1
d-i netcfg/confirm_static boolean true

### CONTA DO USUARIO
d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
### Senha Padrao `printf "abc123!" | mkpasswd -s -m md5`
d-i passwd/root-password-crypted password $1$Gy43AnD3$TkVbQupeEhkrDN4llbPvr0

### USUARIO COMUN (CONTA DESABILITADE SOMENTE USAR ROOT)
d-i passwd/user-fullname boolean false
d-i passwd/username boolean false
d-i passwd/user-password boolean false
d-i passwd/user-password-again boolean false


### HORA
d-i clock-setup/utc boolean true
d-i time/zone string America/Sao_Paulo
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string pool.ntp.br


### PARTICIONAMENTO MANUAL SUPRIME CONFIRMACAO
d-i partman-auto/init_automatically_partition select Manual
d-i partman/confirm boolean true 
d-i partman/confirm_nooverwrite boolean true 

## DESABILITA O MIROR DOWNLOAD DE PACOTES DURANTE A INSTALACAO
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

### CONFIGURACOES DO ATP-GET
d-i apt-setup/use_mirror boolean false


### PACOTES EXTRAS QUE SERAM INSTALADOS
tasksel tasksel/first multiselect standard, ssh-server
d-i pkgsel/include string vim

### NAO ENVIA INFORMACOES REFERENTE A PACOTES UTILIZADOS
popularity-contest popularity-contest/participate boolean false

### INSTALA O GRUB
d-i grub-installer/only_debian boolean true
d-i grub-installer/bootdev string default

### TERMINA A INSTALACAO E REINICIA
d-i finish-install/reboot_in_progress note

## REMOVE O GATEWAY E O DNS PADRAO DA INSTALACAO
d-i preseed/late_command string  sed -i '/gateway/d' /target/etc/network/interfaces ; sed -i '/dns-nameservers/d' /target/etc/network/interfaces ; echo > /target/etc/resolv.conf


Após fazer todas alterações, salve este conteúdo dentro do arquivo iso/preseed.cfg .

Agora atualize o MD5 dos arquivos
# cd ~/iso
# md5sum `find -follow -type f` > md5sum.txt
# cd ..

Agora vamos criar a iso do nosso novo sistema
# genisoimage -o LinuxNovo.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ./iso

Feito, você criou uma ISO de instalação automática, ou quase automática...

Obs:. Na ultima linha d-i preseed/late_command eu posso rodar comandos de pós instalação, também pode ser criado um script para fazer estes ajustes, também pode fazer um chroot /target e rodar comandos na nova instalação, 
Obs2:. /target é a pasta onde esta montada a nova instalação, então tudo que for alterado dentro desta estrutura afeta diretamente a nova instalação

Fonte: https://www.debian.org/releases/stable/i386/apb.html
Fonte2: https://www.debian.org/releases/jessie/example-preseed.txt

Forte abraço a todos,
Marcos Carraro

Read More

quarta-feira, 8 de julho de 2015

Procurando conteúdo dentro de arquivo + mostrar nome do arquivo

Buenas,

Imagine a seguinte situação, você tem um projeto em /var/www/htmll/projeto1/ onde você precisa encontrar a palavra "conteudo_especial" porém você precisa saber em qual arquivo esta este conteudo.

Para isso o nosso querido linux é muito bom.

Vamos lá.

grep -H -r -i "conteudo_especial" .

Simples assim o -i é para olhar letras maisculas e minusculas, o -r é recursivo entra em cada pasta e procura, o -H vai mostrar o nome do arquivo que encontrou a palavra.

Forte abraço,
Marcos Carraro.
Read More

quarta-feira, 17 de junho de 2015

XenServer 6.5 - Adicionando Local Storage

Buenas,

O que veremos é a criação do localstorage na versão 6.5 do xenerver http://xenserver.org/ .

Primeira coisa é verificar as partições criadas...

# fdisk -l

WARNING: GPT (GUID Partition Table) detected on '/dev/cciss/c0d0'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/cciss/c0d0: 500.0 GB, 500051402752 bytes
256 heads, 63 sectors/track, 60556 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes

           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d0p1   *           1       60557   488331447+  ee  EFI GPT


Perceba que ele tem apenas uma partição criada.... OK então você vai se perguntar mas como que uma VM de 12Gb não importa em um disco de 500GB? Logo fizemos um df para verificar o espaço utilizado do / "Não é surpresa que ele tenha 4Gb para a instalação" para mais informações http://xenserver.org/discuss-virtualization/virtualization-blog/entry/xenserver-root-disk-maintenance.html 

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p1     4.0G  1.8G  2.0G  49% /
none                  299M   16K  299M   1% /dev/shm
/opt/xensource/packages/iso/XenCenter.iso
                       56M   56M     0 100% /var/xen/xc-install

Ok, mas cada os outros GB???? Simples assim, vamos listar as partições dentro da partição..

# fdisk -l /dev/cciss/c0d0p1 

Disk /dev/cciss/c0d0p1: 4293 MB, 4293936128 bytes
255 heads, 32 sectors/track, 1027 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes

This doesn't look like a partition table
Probably you selected the wrong device.

             Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d0p1p1   ?      395160      448208   216435558+   7  HPFS/NTFS
Partition 1 does not end on cylinder boundary.
/dev/cciss/c0d0p1p2   ?      400983      640378   976730017   16  Hidden FAT16
Partition 2 does not end on cylinder boundary.
/dev/cciss/c0d0p1p3   ?           1           1           0   6f  Unknown
Partition 3 does not end on cylinder boundary.
/dev/cciss/c0d0p1p4            6153      119429   462167897    0  Empty
Partition 4 does not end on cylinder boundary.

Partition table entries are not in disk order


SHOW!!! Perceba que o  /dev/cciss/c0d0p1p3 esta marcado como unknown então vamos verificar o que ela tem...

# fdisk -l /dev/cciss/c0d0p3 

Disk /dev/cciss/c0d0p3: 491.4 GB, 491460402688 bytes
255 heads, 32 sectors/track, 117632 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes

Disk /dev/cciss/c0d0p3 doesn't contain a valid partition table


BINGO! Esta nesta partição os outros GB escondidos.....

Agora o que nos resta é criar o Storage Local.

Primeiro você precisa o UUID so servidor para isso...

# xe host-list
uuid ( RO)                : 2df79ee1-a6b3-49aa-b272-22c13fbf4573
          name-label ( RW): xenserver3.interno.local
    name-description ( RW): Default install of XenServer

Copie o UUID (RO) pois você ira utilizar na hora de criar o Local Storage...

# xe sr-create content-type=user type=lvm host-uuid=2df79ee1-a6b3-49aa-b272-22c13fbf4573 device-config-device=/dev/cciss/c0d0p3 name-label="DISCO LOCAL" 
723420df-5342-c398-5f7c-45d5116a6b71

Pronto, storage local criado se for utilizar ele como default storage marque ele como default via XenCenter ou por CLI.

# xe pool-list
uuid ( RO)                : ee00c29a-64ac-fc8e-13a5-40a0308db86b
          name-label ( RW): 
    name-description ( RW): 
              master ( RO): 2df79ee1-a6b3-49aa-b272-22c13fbf4573
          default-SR ( RW): <not in database>

# xe pool-param-set uuid=ee00c29a-64ac-fc8e-13a5-40a0308db86b default-SR=723420df-5342-c398-5f7c-45d5116a6b71

Pronto, esta montado o LocalStorge.


Frankenstein - Nome dado ao meu querido servidor de testes que segura a barra de tudo...
Read More

terça-feira, 5 de maio de 2015

Ativando ou Reativando plugins: Java / SilverLight no Google Chrome >= 42

Buenas,

Como todos sabem o GoogleChrome teria desativado alguns plugins como Java, SilverLight entre outros (http://info.abril.com.br/noticias/tecnologia-pessoal/2014/11/silverlight-java-unity-e-outras-extensoes-populares-serao-removidas-do-google-chrome.shtml)

Para resolver o problema a solução é simples, primeiro certifique-se de estar com o Plugin devidamente instalado, feito isso verifique se o mesmo esta ativo digitando na url do GoogleChrome "chrome://plugins" caso não estiver ative.

Ok, plugin ativo, vamos ativar o NPAPI (https://developer.chrome.com/extensions/npapi), para tal na url escreve "chrome://flags/#enable-npapi" e ative caso ela não estiver ativa.


- Não esta Ativa



- Agora esta Ativa
 Bom Proveito

Forte Abraço
Marcos Carraro

Read More

quinta-feira, 12 de março de 2015

iptables + módulo time + conexões estabelecidas + conntrack

Buenas,

Montei recentemente na empresa uma rede para os funcionários somente acessarem a internet nos intervalos, porém meu proxy não esta configurado para tratar com as interceptações https, como os acessos serão feitos por mobile wpad não funcionária como esperado, a solução seria fazer o redirecionamento por iptables no qual cai na falta da configuração do proxy.

Solução, fazer um forward da rede funcionários para a rede externa somente nos horários, show, rápido fácil e focado.

iptables -A FORWARD -s 192.168.20.0/255.255.255.0 -m time --timestart 00:00:00 --timestop 11:55:00 --weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP

iptables -A FORWARD -s 192.168.20.0/255.255.255.0 -m time --timestart 21:59:00 --timestop 23:59:00 --weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP

iptables -A FORWARD -s 192.168.20.0/255.255.255.0 -m time --timestart 12:55:00 --timestop 21:00:00 --weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP

Ok, fiz o teste show, as conexões com estado "new" fora desse horário é dropada, porém se o usuário acessa as 12:54 a conexão dele passa de "new" para "established", com isso ele teria esse canal fechado até o término da conexão por uma das partes.

Ali começou o problema, pois eu tinha que garantir que a conexão seria morta neste horário, pois o bem o iptables faz um rastreamento das conexões chamdo de conntrack, logo já tinha uma solução, apagar as entradas da rede no conntrack, assim eu faria com que a conexão solicita-se novamente o registro para o acesso, e como iria bater com a regra pois a conexão seria "new" o pacote seria dropado, tá feita a solução.

Para isso nada melhor que a crontab e um script.

Na crontab coloco para rodar alguns minutos depois do tempo final do intervalo para garantir que ninguém vai ficar de bobeira.

Lista as entradas da rede funcionários, sem repetir
# conntrack -L conntrack |  awk '{print $5}' | grep src=192.168.20. | sed -e "s/src=//g" | sort | uniq

Apaga a entrada
# conntrack -D -s 192.168.20.88


#!/bin/bash
conntrack -L conntrack |  awk '{print $5}' | grep src=192.168.20. | sed -e "s/src=//g" | sort | uniq |
    while read ip; do
        conntrack -D -s $ip > /dev/null
done



Read More

quarta-feira, 25 de fevereiro de 2015

Resolver problema Download .zip com PHP Corrompendo + Limitando Velocidade de Download de Arquivo com PHP

Bom Dia,


Hoje finalizei um sistema e por incrível que parece por algum motivo estranho ele corrompia os downloads em zip, fazendo algumas buscas comentaram do mod deflat do apache, onde ele faz a compressão dos arquivos para melhorar a performance do site e ocupar menos banda (Para testes:  http://www.whatsmyip.org/http-compression-test/  ) .

Ok, então no meu .htaccess inseri a seguinte linha.

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript application/ecmascript application/rss+xml
</IfModule>

Onde segundo ele deveria apenas compactar estes "mimes types", porém ele acabou compactando o .zip achei estranho, porém acabou resolvendo o problema, ainda fiquei "encucado" com o porque que ele compactou sendo que não declarei ele.

Download do zip resolvido é hora de ir para o php, onde vamos limitar a velocidade do download do usuário.

            // header para forçar download
            header('Content-Description', 'File Transfer');
            header('Pragma: public');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Cache-Control: private', false);
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="arquivo.zip"'); // Nome do arquivo
            header('Content-Transfer-Encoding: binary');
            header('Content-Length: ' . filesize('./upload/arquivo.zip'));
            header('Connection: close');
            // Metodo com limitacao de banda para 150k
            flush();
            $arqAberto = fopen("./upload/arquivo.zip", 'rb');
            while (!feof($arqAberto)) {
                echo fread($arqAberto, round(150 * 1024));
                flush();
                sleep(1);
            }
            fclose($arqAberto);


Forte abraço
Marcos Carraro.


Read More

segunda-feira, 23 de fevereiro de 2015

Testando "throughput" de rede

Boa Noite,

Pessoal, hoje vamos ver como fazer um teste de carga na rede / servidor.

Partindo do princípio que você esteja usando Centos/Fedora instale no servidor e no cliente o pacote "iperf"

No servidor vamos colocar ele em modo de "escuta"

# Ip Servidor: 192.168.1.1
# iperf -s

Cliente
# iperf -c 192.168.1.1

Agora vamos aumentar o tamanho do buffer para 10mb, para fazer isso utilize o parâmetro "-w 10M" de 10M pode ser até 10G

Exemplos

# Ip Servidor: 192.168.1.1
# iperf -s -w 10M

Cliente
# iperf -c 192.168.1.1 -w 10M

Agora faça a leitura deste arquivo para otimizar alguns parâmetros do kernel para melhorar a rede
https://www.frozentux.net/documents/ipsysctl-tutorial/

Tem um link no digitalocean que não consigo encontrar que também tratava dos parâmetros de kernel era mais direto ao ponto.

Mais informações
https://iperf.fr/

Obs:. O ideal é antes de botar para funcionar os novos parâmetros é de salvar o valor default do mesmo, pois as vezes existe a melhora como pode piorar.

Bons Testes
Read More

quarta-feira, 7 de janeiro de 2015

Criando uma ISO Customizada do Centos 6.6 + Incluir pacote na ISO

Buenas, feliz ano novo que 2015 seja ótimo.

Hoje vamos ver como criar uma instalação personalizada do centos utilizando o Kickstart não vou explicar linha por linha do arquivo pois no site do Fedora existe um documento completo referente a ele.

1- Preparação do diretório, vamos trabalhar na home do usuário root, para isso.
# su root
# cd ~
# mkdir build

2 - Faça o download da ISO no site do centos
# cd ~
# wget http://centos.ufms.br/6.6/isos/x86_64/CentOS-6.6-x86_64-minimal.iso

3 - Monte a ISO e extraia o seu conteudo para  a pasta build
# mount -o loop CentOS-6.6-x86_64-minimal.iso /mnt
# cd /mnt
# tar -cf - . | (cd ~/build/ ; tar -xvpf - )
# umout /mnt

4 - Crie o arquivo Kickstart Obs:. Segue um kickstart bem simples
# vim ~/build/ks.cfg
=======================================================================

#
# Marcos Carraro - Kickstart
#
# SO: Centos 6.6 x64
# Desc: Centos minimal, ainda mais leve com pequenas alteracoes, criacao da estrutura dos arquivos em LVM\
#  ip default: 15.0.0.1/24 | senha root default: abc123! | No minimo 10gb de disco e 1gb de memoria
#
#

install
cdrom
lang pt_BR.UTF-8
keyboard br-abnt2
network --onboot yes --device eth0 --bootproto static --ip 15.0.0.1 --netmask 255.255.255.0 --noipv6 --hostname atomicserver
rootpw  --iscrypted $6$Dr2vTVfUFzXVwn.t$n2hGfw0pa/cv7W.e/z21glUPkMHZAlsVAfB/NFxWBCjQZlQPWQwQjs1L6kuzghRqYzjL5AghYuXSv/EoceYjO0
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc America/Sao_Paulo


#
# Disco e particionamento
#
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto quiet"
#clearpart --all --initlabel --drives=sda
clearpart --all --initlabel

part /boot --fstype=ext4 --asprimary --size=256
part pv.202002 --grow --size=200

volgroup vg_disco --pesize=4096 pv.202002
logvol swap --name=lv_swap --vgname=vg_disco --size=1024
logvol / --fstype=ext4 --name=lv_tudo --vgname=vg_disco --size=1024
logvol /var  --fstype=ext4 --name=lv_var --vgname=vg_disco --size=1024

#
# Repositorio para instalar os pacotes
#
repo --name="CentOS"  --baseurl=file:///mnt/source --cost=100

#
# Desabilita alguns servicos
#
services --disabled=auditd,ip6tables,iptables,mdmonitor

#
# pacotes que serao instalados
#
%packages --nobase --excludedocs

#
# Instalar pacotes...
#
@core
perl
tcpdump
bc
vconfig
vim-common
vim-enhanced
traceroute
bind-utils

#
# Remover pacotes...
#
-selinux*
-libselinux*
-dhclient*
-mdadm*

%end

#
# Reinicia o servidor apos a instalacao
#
reboot

=======================================================================

5 - Instale o plugin do yum para baixar os pacotes
# yum install yum-plugin-downloadonly

6 - Baixe os pacotes que deseja incluir no nosso caso  o vim, traceroute, bind-utils, vconfig, bc
# yum install --downloadonly --downloaddir=~/build/Packages/ $(repoquery --requires tcpdump vim-common vim-enhanced bc vconfig traceroute bind-utils perl perl-libs)
# yum install --downloadonly --downloaddir=~/build/Packages/ tcpdump vim-common vim-enhanced bc vconfig traceroute bind-utils perl perl-libs

7 - Atualize o repositório da ISO.
# cd ~/build/
# createrepo -v --update -g `find repodata -iname *minimal*.xml` .

8 - Criar as entradas no menu de boot
# vim isolinux/isolinux.cfg
Adicione as seguintes linhas logo acima do "label linux"
Obs:. Lembre de remover o "menu default" da entrada do "lavel linux"

label AtomicServer
  menu label ^Instalacao do Centos Customizado
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg nomodeset

9 - Crie a iso
# cd ~/build
# mkisofs -joliet-long -z -T -o ../Centos-6.6-x64_Customizado.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -m TRANS.TBL .

10 - Instale ele.

Forte abraço
Marcos Carraro


Read More

Posts que a turma mais esta lendo...

Posts que a turma mais esta lendo...

Marcos Carraro