Transmission, mudando o usuário do daemon

Como tenho o Plex Media Server rodando com meu usuário no meu NAS, mesmo tendo meu usuário no grupo transmission, ele não estava conseguindo pegar os novos arquivos baixados pelo transmission.

Desta forma, resolvi mudar o usuário com o qual o daemon do transmission é executado, abaixo segure o procedimento:

# cp /usr/lib/systemd/system/transmission.service /etc/systemd/system/
# vim /etc/systemd/system/transmission.service

Mude:
User=transmission
Para:
User=leandrocarvalho

# cp /usr/lib/tmpfiles.d/transmission.conf /etc/tmpfiles.d/
# vim /etc/tmpfiles.d/transmission.conf

Mude:
d /run/transmission - transmission transmission -
Para:
d /run/transmission 0755 leandrocarvalho transmission - -

# systemd-tmpfiles –clean –create /etc/tmpfiles.d/transmission.conf
# cp -pau /var/lib/transmission/.config/transmission-daemon /home/leandrocarvalho/.config/
# chown leandrocarvalho:transmission -R /home/leandrocarvalho/.config/transmission-daemon/

$ vim .config/transmission-daemon/settings.json

Mude:
"incomplete-dir": "/var/lib/transmission/Downloads",
Para:
"incomplete-dir": "/home/leandrocarvalho/Downloads",

# systemctl daemon-reload
# systemctl disable transmission
# systemctl enable transmission

# ps aux | grep transmission | grep -v grep | tr -s ” ” | cut -d ” ” -f 2 | xargs kill -9
# rm /run/transmission/transmission.pid
# systemctl start transmission

Migração de disco, lvm, criptografia e configurações de serviços

Nos últimos dias o pendrive que estava utilizando como disco principal no meu NAS começou a corromper o sistema após atualizações, creio que o cupado seja o journal do filesystem porém não tive muita paciência para descobrir a real causa, resolvi migrar para um disco do NAS.

Hoje o meu NAS contém um HDD de 250GB e 2 HDDs de 1TB.
Resolvi migrar para o de 250GB e montar um esquema de particionamento mais elaborado, além de usar LVM e Criptografia nos discos extras.

Com o sistema ainda rodando no pendrive, realizei os seguintes passos para migrar de disco.

Reparticionei o disco criando duas partições, uma para o boot e outro para a LVM:
# cfdisk /dev/sdb

Criei um volume físico para LVM:
# pvcreate /dev/sdb2

Verifiquei se foi criado corretamente:
# pvdisplay

Criei o volume lógico e o esquema de particionamento na LVM:
# vgcreate LogVolSystem /dev/sdb2
# lvcreate -L 2G LogVolSystem -n root
# lvcreate -L 2G LogVolSystem -n swap
# lvcreate -L 4G LogVolSystem -n opt
# lvcreate -L 2G LogVolSystem -n tmp
# lvcreate -L 4G LogVolSystem -n usr
# lvcreate -L 4G LogVolSystem -n var
# lvcreate -l 100%FREE LogVolSystem -n home

Formatei as partições e ativei a swap:
# mkfs.ext4 -m 1 -L BOOT /dev/sdb1
# mkfs.ext4 -m 1 -L ROOT /dev/mapper/LogVolSystem-root
# mkfs.ext4 -m 1 -L OPT /dev/mapper/LogVolSystem-opt
# mkfs.ext4 -m 1 -L TMP /dev/mapper/LogVolSystem-tmp
# mkfs.ext4 -m 1 -L USR /dev/mapper/LogVolSystem-usr
# mkfs.ext4 -m 1 -L VAR /dev/mapper/LogVolSystem-var
# mkfs.ext4 -m 1 -L HOME /dev/mapper/LogVolSystem-home
# mkswap -c -L SWAP /dev/mapper/LogVolSystem-swap
# swapon /dev/mapper/LogVolSystem-swap

O esquema ficou da seguinte forma:
/boot : 500MB
/ : 2GB
SWAP : 2GB (Não mais que isso, a regra de 2x a RAM serve para servidores com menos de 1 GB)
/home : O restante livre na LVM (210GB)
/opt : 4GB
/tmp : 2GB em ext4
/usr : 4GB em ext4
/var : 4GB ou mais se disponível em ext4

Agora começando o procedimento de instalação:
# mount /dev/mapper/LogVolSystem-root /mnt/new/

Criando os diretório necessários:
# mkdir -p /mnt/new/{boot,home,opt,usr,var}
# mkdir -m 0755 -p /mnt/new/{dev,run,etc}
# mkdir -m 1777 -p /mnt/new/tmp
# mkdir -m 0555 -p /mnt/new/{sys,proc}

# mount /dev/sdb1 /mnt/new/boot/
# mount /dev/mapper/LogVolSystem-home /mnt/new/home/
# mount /dev/mapper/LogVolSystem-opt /mnt/new/opt/
# mount /dev/mapper/LogVolSystem-tmp /mnt/new/tmp/ -o strictatime,nodev,nosuid,noexec
# mount /dev/mapper/LogVolSystem-usr /mnt/new/usr/
# mount /dev/mapper/LogVolSystem-var /mnt/new/var/

# mount -t proc proc /mnt/new/proc -o nosuid,noexec,nodev
# mount -t sysfs sys /mnt/new/sys -o nosuid,noexec,nodev
# mount -t devtmpfs udev /mnt/new/dev -o mode=0755,nosuid
# mount -t devpts devpts /mnt/new/dev/pts -o mode=0620,gid=5,nosuid,noexec
# mount -t tmpfs shm /mnt/new/dev/shm -o mode=1777,nosuid,nodev,noexec
# mount -t tmpfs run /mnt/new/run -o nosuid,nodev,mode=0755

Criando os diretórios para o pacman:
# mkdir -m 0755 -p /mnt/var/{cache/pacman/pkg,lib/pacman,log}

Como já tinha os pacotes necessários instalados no pendrive, executei o seguinte comando e tirei os pacotes que instalei do AUR (hydra, spindown e plexmediaserver:
# pacman -Syuw –noconfirm
# pacman -Qq > all_pkgs.txt
# for PKG in `cat all_pkg.txt`; do pacman -r /mnt/new/ -Sy –noconfirm $PKG; done
# cp -a /etc/pacman.d/gnupg /mnt/new/etc/pacman.d/

Entrei no chroot:
# cd /mnt/new/
# chroot /mnt/new /bin/bash

Gerei e editei o fstab:
# genfstab -U / >> etc/fstab
# vim etc/fstab

/proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
/sys /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=3980200k,nr_inodes=995050,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0
/run /run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0

# /dev/mapper/LogVolSystem-root LABEL=ROOT
UUID=67c5e549-41a5-43e4-a1e1-32b9c380f469 / ext4 rw,relatime,data=ordered 0 1
# /dev/sdd1 LABEL=BOOT
UUID=9a3e36d1-a24c-4743-8ac6-f8e7ba047a51 /boot ext4 rw,relatime,data=ordered,noexec,nosuid,nodev 0 2
# /dev/mapper/LogVolSystem-home LABEL=HOME
UUID=63eb7f5a-5369-4cb9-a4d7-393da0be62ee /home ext4 rw,relatime,data=ordered,noexec,nosuid,nodev 0 2
# /dev/mapper/LogVolSystem-opt LABEL=OPT
UUID=eab28e23-4ae5-4a1b-a546-4cc920f0a5b0 /opt ext4 rw,relatime,data=ordered,noexec,nosuid,nodev 0 2
# /dev/mapper/LogVolSystem-tmp LABEL=TMP
UUID=6026ccce-f644-4ff3-bd5b-85faacfc676d /tmp ext4 rw,relatime,data=ordered,noexec,nosuid,nodev 0 2
# /dev/mapper/LogVolSystem-usr LABEL=USR
UUID=f57142e7-f4a7-4d06-826d-c0d1d4a31d27 /usr ext4 rw,relatime,data=ordered,nodev 0 2
# /dev/mapper/LogVolSystem-var LABEL=VAR
UUID=d509ba62-493e-435d-95f5-f34d0b2a77e2 /var ext4 rw,relatime,data=ordered,nodev 0 2
# /dev/mapper/LogVolSystem-swap LABEL=SWAP
UUID=8873920c-f4d3-4f46-8877-bacfc37f959f none swap defaults,pri=-2 0 0

Editei a configuração de rede:
# vim /etc/netctl/eth0

Description=’A basic static ethernet connection’
Interface=eth0
Connection=ethernet
IP=static
Address=(‘192.168.1.10/24’)
#Routes=(‘192.168.0.0/24 via 192.168.1.2′)
Gateway=’192.168.1.1’
DNS=(‘192.168.1.1’)

## For IPv6 autoconfiguration
#IP6=stateless

## For IPv6 static address configuration
#IP6=static
#Address6=(‘1234:5678:9abc:def::1/64’ ‘1234:3456::123/96’)
#Routes6=(‘abcd::1234′)
#Gateway6=’1234:0:123::abcd’

Para garantir que o nome da interface continuasse eth0 precisamos realizar o seguinte passo:
vim /etc/udev/rules.d/80-net-name-slot.rules

# This file masks persistent renaming rules for network devices. If you
# delete this file, /usr/lib/udev/rules.d/80-net-name-slot.rules may
# rename network devices according to ID_NET_NAME_{ONBOARD,SLOT,PATH}
# properties of your network devices, with priority in that order. See
# the output of ‘udevadm test-builtin net_id /sys/class/net/$interface’
# for details on what that new name might be.
#
# http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames

Habilitamos a interface:
# netctl enable eth0

Agora vamos habilitar multi-user e evitamos habilitar o runlevel da interface gráfica:
# systemctl enable multi-user.target

Verificamos o que tem para iniciar com o sistema:
# ls -l /etc/systemd/system/multi-user.target.wants/

Popular a chaves do pacman:
# pacman-key –init
# pacman-key –populate archlinux

Configurando o sistema:
# vim /etc/hosts

127.0.0.1 archNAS.localdomain archNAS

# vim /etc/hostname

archNAS

# vim /etc/vconsole.conf

KEYMAP=br-abnt2
FONT=
FONT_MAP=
FONT_UNIMAP=

# vim /etc/locale.gen

en_US.UTF-8 UTF-8
en_US ISO-8859-1
pt_BR.UTF-8 UTF-8
pt_BR ISO-8859-1

# vim /etc/locale.conf

LANG=en_US.UTF-8
LC_MESSAGES=C
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=en_US.UTF-8

# locale-gen
# ln -s /usr/share/zoneinfo/America/Maceio /etc/localtime
# vim /etc/timezone

America/Maceio

# vim /etc/adjtime

0.000000 1358104440 0.000000
1358104440
UTC

Agora vamos ajustar o mkinitcpio para ativarmos a LVM e a partição USR na inicialização do sistema:
# vim /etc/mkinitcpio.conf

HOOKS=”base udev autodetect modconf block lvm2 filesystems keyboard shutdown fsck usr”

Adicione lvm2, entre block e filesystem para ter suporte a LVM e shutdown, fsck e usr (nesta ordem) para ter suporte a partição usr, que está separada, na inicialização.
Dúvidas sobre estas opções, favor verificar este link e este outro.

Gere novamente a imagem do kernel:
# mkinitcpio -p linux

Edite as opções do grub e gere uma nova configuração:
# vim /etc/default/grub

GRUB_DISABLE_LINUX_UUID=false
GRUB_COLOR_NORMAL=”light-blue/black”
GRUB_COLOR_HIGHLIGHT=”light-cyan/blue”

# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install –recheck /dev/sdb

Mude a senha de root, ajustando permissão no /rooot e copie os arquivos do skel:
# passwd
# chmod 750 /root
# cp -a /etc/skel/.bash* ~/

Agora limite o tempo (em segundos) que o root pode ficar sem digitar nenhum comando e faça logout automático:
# vim .bashrc

TMOUT=60

Crie o usuário e sete uma senha:
# useradd -d /home/leandrocarvalho -k /etc/skel -m -s /bin/bash leandrocarvalho
# passwd leandrocarvalho

Copie o que precisar do outro sistema:
# cp -a /usr/local/sbin/* /mnt/new/usr/local/sbin/
# cp -a /usr/local/bin/* /mnt/new/usr/local/bin/
# cp -a /var/lib/transmission/ /mnt/new/var/lib/

Agora saia do chroot e reboot para entrar já com o novo sistema:
# ^D
# reboot

Agora vamos a configuração dos serviços.
SSH:
# vim /etc/ssh/sshd_config

Port 8822
PermitRootLogin no
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM yes
PrintMotd no # pam does that
UsePrivilegeSeparation sandbox # Default for new installations.
Subsystem sftp /usr/lib/ssh/sftp-server
AllowUsers leandrocarvalho

# systemctl enable sshd.service
# systemctl start sshd

NOIP:
# noip2 -C
# systemctl enable noip2.service
# systemctl start noip2

Smartmontools:
# systemctl enable smartd.service
# systemctl start smartd

HDDTEMP:
# systemctl enable hddtemp.service
# systemctl start hddtemp

Instale o spindo do AUR e faça:
# systemctl enable spindown
# vim /etc/spindown.conf

[General]
cycle-time = 60 # Number of seconds between cycles.

idle-time = 3600 # The time in seconds a disk has to be idle before it is spundown.
# Do not use a value that is to small (less than 3600) unless you
# know what you are doing.

syslog = 0 # Turn this on if you want spindown to log messages using syslog.
# You will not want to turn this on if you are trying to spindown
# the disk with the root filesystem on.
[Disk 0]
#id = ata-VB0250EAVER_Z2AYARBD
name = sda
spindown = 1
command = hdparm -y

[Disk 1]
#id = ata-SAMSUNG_HD103SJ_S2NWJ50BB01403
name = sdb
spindown = 1
command = hdparm -y

[Disk 2]
#id = ata-Hitachi_HDT721010SLA360_STF604MR28AR1P
name = sdc
spindown = 1
command = hdparm -y

Ajuste o service, pois o que vem no pacote não funciona adequadamente.
# vim /usr/lib/systemd/system/multi-user.target.wants/spindown.service

[Unit]
Description=Spindown Daemon
After=syslog.target

[Service]
Type=forking
ExecStart=/sbin/spindownd -d -f /run/spindown/spindownd.fifo -c /etc/spindown.conf -p /run/spindown/spindownd.pid
PIDFile=/run/spindown/spindownd.pid

[Install]
WantedBy=multi-user.target

# systemctl start spindown

Samba:
# vim /etc/samba/smb.conf

[global]
workgroup = archNAS
server string = Arch Linux Network Attached Storage
security = user
encrypt passwords = yes
hosts allow = 192.168.1. 127.
log file = /var/log/samba/%m.log
max log size = 50
dns proxy = no
follow symlinks = yes
wide links = yes
unix extensions = no
syslog = 1
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

# Acesso Irrestrito
[home]
comment = Home NAS
path = /home/leandrocarvalho
valid users = leandrocarvalho
force users = leandrocarvalho
public = no
browseable = no
writable = yes
printable = no
guest ok = no

[disk1]
comment = Disco 1 – 1TB
path = /mnt/disk1
valid users = leandrocarvalho
force users = leandrocarvalho
public = no
browseable = no
writable = yes
printable = no
guest ok = no

[disk2]
comment = Disco 2 – 1TB
path = /mnt/disk2
valid users = leandrocarvalho
force users = leandrocarvalho
public = no
browseable = no
writable = yes
printable = no
guest ok = no

# systemctl enable smbd.service
# smbpasswd -a leandrocarvalho
# systemctl start smbd

Instale o plex do AUR e configure:
# systemctl enable plexmediaserver.service
# vim /etc/conf.d/plexmediaserver

PLEX_MEDIA_SERVER_USER=leandrocarvalho
PLEX_MEDIA_SERVER_HOME=/usr/lib/plexmediaserver

# the number of plugins that can run at the same time
PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS=10

# ulimit -s $PLEX_MEDIA_SERVER_MAX_STACK_SIZE
PLEX_MEDIA_SERVER_MAX_STACK_SIZE=3000

# where the mediaserver should store the transcodes
PLEX_MEDIA_SERVER_TMPDIR=/home/leandrocarvalho/plexmediaserver/tmp

# uncomment to set it to something else
PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR=”$(awk -F: -v v=${PLEX_MEDIA_SERVER_USER} ‘{if ($1==v) print $6}’ /etc/passwd)/plexmediaserver/var/lib/plexmediaserver”

# systemctl start plexmediaserver

Transmission:
# vim /var/lib/transmission/.config/transmission-daemon/settings.json

“rpc-username”: “leandrocarvalho”,
“rpc-whitelist”: “127.0.0.1, 192.168.1.*, 201.65.63.114, 177.47.181.76”,

# gpasswd -a transmission users
# gpasswd -a leandrocarvalho users
# gpasswd -a leandrocarvalho transmission
# systemctl start transmission

VSFTPD:
# vim /etc/vsftpd.conf

anonymous_enable=YES
anon_root=/mnt/disk1/temp
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
listen=YES

# systemctl start vsftpd

LVM e Criptografia nos outros discos:

# cfdisk /dev/sdb
# cryptsetup luksFormat /dev/sdb1
# cryptsetup luksDump /dev/sdb1
# cryptsetup luksOpen /dev/sdb1 disk1
# ls -a /dev/mapper/
# pvcreate /dev/mapper/disk1
# pvdisplay
# vgcreate LogVolDisk1 /dev/mapper/disk1
# vgdisplay
# lvcreate -l 100%FREE LogVolDisk1 -n lvdisk1
# lvdisplay
# mkfs.ext4 -m 1 -L Disk1 /dev/LogVolDisk1/lvdisk1
# mount /dev/LogVolDisk1/lvdisk1 /mnt/disk1/
# chown -R leandrocarvalho: /mnt/disk1

Se precisar adicione encrypt antes de block, para as partições criptografadas serem inicializadas juntas com o sistema.

# vim /etc/mkinitcpio.conf

HOOKS=”base udev … encrypt block lvm2 filesystems”

Alguns erros foram encontrados durante o boot, seguem os erros e soluções:

ERROS:
1. ERST: Failed to get Error Log Address Range
2. i8042: No controller found
3. ../source3/printing/print_cups.c:151(cups_connect)
../source3/printing/print_cups.c:528(cups_async_callback)
failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Unable to connect to CUPS server /var/run/cups/cups.sock:631 – No such file or directory
4. Ignoring unknown parameter “force users”
5. tsc: Fast TSC calibration failed
6. Device: /dev/sdc [SAT], WARNING: A firmware update for this drive may be available,
see the following Seagate web pages:
http://knowledge.seagate.com/articles/en_US/FAQ/207931en
http://knowledge.seagate.com/articles/en_US/FAQ/223651en
7. ata6.00: failed to enable AA (error_mask=0x1)

SOLUÇÕES

1. http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c03731635&lang=en&cc=us&taskId=101&prodSeriesId=5268290&prodTypeId=15351
2. Como não existe PS2 no computador esta mensagem é apresentada no log
3. Adicionado as opções:
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
4. Mudando de “force users” para “force user”
5. Erro intermitente, não ocorre em todos os boots.
Mas esse problema pode ser resolvido com este link:
http://penguintengil.wordpress.com/2012/11/03/solving-error-0-000000-fast-tsc-calibration-failed-when-booting-in-fedora-16/
6. Precisa atualizar o firmware do HDD
7. Adicionar estas opções na linha do kernel no grub: “ide0=noprobe ide1=noprobe”

Caso você tenha alguma sugestão ou crítica, favor colocar nos comentários.

Instalando Arch Linux no pendrive

No final do ano passado realizei a compra de um HP Proliant N40L [1] [2] [3], como passei quase 3 meses sem internet em casa e estava ansioso para botar para funcionar, resolvi instalar usando os conhecimentos e ferramentas que tinha em mãos (meu notebook, Arch Linux atualizado, um pendrive de 8gb San Cruzer, 2 discos adicionais e o NAS) naquele momento.

Desta resolvi instalar o Arch Linux em um PenDrive e montar um NAS/HTPC caseiro.
Escolhi instalar num pendrive para tentar economizar energia e fazer spindown nos discos caso necessário sem afetar o funcionamento do sistema.
Abaixo mostro um breve resumo do que fiz para deixar o Arch rodando a partir de um pendrive.

Primeiro tive que copiar a mbr existente do disco local (notebook) para o pendrive, isso evita problemas na instalação do grub.

# dd if=/dev/sda of=/dev/sdc bs=512 count=1

Em caso de dúvidas, ver este link e este outro.

Crie as partições /boot, swap e /.
Você pode criar mais partições como /var e /usr para melhorar a segurança caso ache necessário e se seu pendrive possuir espaço suficiente.

# cfdisk /dev/sdc

Formate as partições e ative a swap

# mkfs.ext4 -m 1 -L BOOT /dev/sdc1
# mkfs.ext4 -m 1 -L ROOT /dev/sdc3
# mkswap -L SWAP /dev/sdc2

# swapon /dev/sdc2

Crie os diretórios e monte as partições

# mount /dev/sdc3 /mnt/
# mkdir -p /mnt/boot
# mount /dev/sdc1 /mnt/boot/

# mkdir -m 0755 -p /mnt/{dev,run,etc}
# mkdir -m 1777 -p /mnt/tmp
# mkdir -m 0555 -p /mnt/{sys,proc}

# mount -t proc proc /mnt/proc -o nosuid,noexec,nodev
# mount -t sysfs sys /mnt/sys -o nosuid,noexec,nodev
# mount -t devtmpfs udev /mnt/dev -o mode=0755,nosuid
# mount -t devpts devpts /mnt/dev/pts -o mode=0620,gid=5,nosuid,noexec
# mount -t tmpfs shm /mnt/dev/shm -o mode=1777,nosuid,nodev
# mount -t tmpfs run /mnt/run -o nosuid,nodev,mode=0755
# mount -t tmpfs tmp /mnt/tmp -o mode=1777,strictatime,nodev,nosuid,size=50M

Crie as partições do pacman

# mkdir -m 0755 -p /mnt/var/{cache/pacman/pkg,lib/pacman,log}

Copie o sync do host para o pendrive

# cp -a /var/lib/pacman/sync/ /mnt/var/lib/pacman/

Instale o sistema e pacotes adicionais

# pacman -r /mnt/ -S base –ignore netcfg
# pacman -r /mnt/ -S grub-bios grub-common ntfs-3g fuse iptables vim arch-install-scripts wget mlocate screen

Copie as chaves do host para o pendrive

# cp -a /etc/pacman.d/gnupg /mnt/etc/pacman.d/

Monte o chroot

# cd /mnt/
# chroot /mnt/ /bin/bash

Gere e configure o fstab conforme o funcionamento do seu computador e identificação do device, neste caso, tenho 3 HDs, ajusto o fstab para pegar o UUID e adiciono mais um disco para ser a home do usuário no NAS caseiro.
Para pegar o UUID do disco, use o comando blkid.

# genfstab / >> /etc/fstab
# vim /etc/fstab

/proc                   /proc           proc            rw,nosuid,nodev,noexec,relatime                                 0 0
/sys                    /sys            sysfs           rw,nosuid,nodev,noexec,relatime                                 0 0
udev                    /dev            devtmpfs        rw,nosuid,relatime,size=3980200k,nr_inodes=995050,mode=755      0 0
devpts                  /dev/pts        devpts          rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000           0 0
shm                     /dev/shm        tmpfs           rw,nosuid,nodev,relatime                                        0 0
/run                    /run            tmpfs           rw,nosuid,nodev,relatime,mode=755                               0 0
/tmp                    /tmp            tmpfs           rw,nosuid,nodev,size=51200k                                     0 0

UUID="8ef1e29a-2330-40ff-a626-0dc212bdce69"             none            swap            defaults
UUID="f6d5e6a2-147a-4cd5-9254-7c5cb84099bc"             /               ext4            rw,relatime,data=ordered,noatime                        0 1
UUID="83e6cddd-a986-41e5-879e-162de68336a0"             /boot           ext4            rw,relatime,data=ordered,noatime,noexec,nosuid,nodev    0 2
UUID="413bda0e-1031-4ca8-9e9d-4d96962b4dcd"             /home           ext4            rw,relatime,data=ordered,noatime,noexec,nosuid,nodev    0 2

Agora continue com a instalação e configure a interface de rede.
Se for dhcp, faça:

# dhcpd eth0

Se for ip fixo, faça:

# ip addr add 192.168.1.12/24 dev eth0
# ip route add default via 192.168.1.1

Configure o resolv.config para usar o DNS do google

# vim /etc/resolv.conf

8.8.8.8
8.8.4.4

Agora inicialize as chaves e depois popule-as:

# pacman-key –init
# pacman-key –populate archlinux

Configuração de rede

# vim /etc/hosts

127.0.0.1       archNAS.localdomain     archNAS

# vim /etc/hostname

archNAS

Configure o NETCFG:

Se você não instalou o netcfg, instale, atualmente é o padrão para configuração de rede no Arch e está incluso no grupo base.

# pacman -S netcfg
# cd /etc/network.d/
# cp examples/ethernet-iproute .

Copiado o exemplo, vamos mudar o nome do profile e editar.

# mv ethernet-iproute eth0
# vim eth0

CONNECTION='ethernet'
DESCRIPTION='A more versatile static ethernet connection using iproute'
INTERFACE='eth0'
IP='static'
# Any valid iproute command can be placed in this array
IPCFG=('addr add dev eth0 192.168.1.10/24 brd +' 'route add default via 192.168.1.1')
DNS=('192.168.1.1')

# vim /etc/conf.d/netcfg

Edite e identifique as interfaces de rede que são usadas no seu computador.
Mantenha AUTO_PROFILES padrão.

E em NETWORKS, tire o last e defina o profile “eth0” que foi criado.

Habilite o netcfg para iniciar no boot.

# systemctl enable netcfg
# systemctl start netcfg

Fontes do console e Keymap

# vim /etc/vconsole.conf

KEYMAP=br-abnt2
FONT=
FONT_MAP=
FONT_UNIMAP=

Configure as locales

# vim /etc/locale.gen

en_US.UTF-8 UTF-8
en_US ISO-8859-1
pt_BR.UTF-8 UTF-8
pt_BR ISO-8859-1

# locale -v > /etc/locale.conf

Ajuste o LC_ALL, caso ache necessário e coloque a locale usada no /etc/locale.conf.

LANG=pt_BR.UTF-8
LC_MESSAGES=C
LC_CTYPE="pt_BR.UTF-8"
LC_NUMERIC="pt_BR.UTF-8"
LC_TIME="pt_BR.UTF-8"
LC_COLLATE="pt_BR.UTF-8"
LC_MONETARY="pt_BR.UTF-8"
LC_MESSAGES="pt_BR.UTF-8"
LC_PAPER="pt_BR.UTF-8"
LC_NAME="pt_BR.UTF-8"
LC_ADDRESS="pt_BR.UTF-8"
LC_TELEPHONE="pt_BR.UTF-8"
LC_MEASUREMENT="pt_BR.UTF-8"
LC_IDENTIFICATION="pt_BR.UTF-8"
LC_ALL=pt_BR.UTF-8

# vim /etc/locale.conf
# locale-gen

Ajuste o localtime criando um link simbolico e o adjtime:

# ln -s /usr/share/zoneinfo/America/Maceio /etc/localtime
# vim /etc/timezone

America/Maceio

# adjtime

0.0 0.0 0.0
0
LOCAL

Configure os módulos que você precise para usar o sistema, neste caso vou usar iptables como firewall local e alguns serviços como samba, transmission, etc.

# vim /etc/modules-load.d/firewall.conf

ip_tables
nf_conntrack_netbios_ns
nf_conntrack

Caso queria bloquear algum módulo, crie o arquivo:

# vim /etc/modprobe.d/nobeep.config

blacklist pcspkr

Configurando algumas opções do KERNEL

# vim /etc/mkinitcpio.conf

HOOKS="base udev autodetect pata scsi sata filesystems usbinput fsck usb"

Adicione “usb” ao final pois você está instalando arch num pendrive, desta forma o sistema vai reconhecer os módulos da USB ao iniciar o sistema para bootar normalmente pelo pendrive.

OBS.: Depois de alguns updates no HOOKS “block” substitui pata, scsi, sata e usb, e “keyboard” substitui usbinput, ficando da seguinte forma:

HOOKS="base udev autodetect filesystems keyboard fsck block"

Descomente a linha do COMPRESSION referente ao xz

COMPRESSION="xz"

Agora atualize a imagem do kernel:

# mkinitcpio -p linux

Configurando algumas opções do GRUB

# vim /etc/default/grub
Descomente

GRUB_DISABLE_LINUX_UUID=false
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install –recheck /dev/sdc

Instale o Microcode da AMD para não visualizar mensagens de error como:
microcode: failed to load file amd-ucode/microcode_amd.bin

# pacman -Sy amd-ucode

Defina a senha de root

# passwd

Adicione um usuário

# useradd -d /home/leandrocarvalho -k /etc/skel -m -s /bin/bash leandrocarvalho
# passwd leandrocarvalho

Defina multi-user.target como run level default (runlevel de 2-3) no lugar do graphics (runlevel 5), para não receber mensagens de warning no boot.

# systemctl enable multi-user.target

Saia do chroot e desmonte todas as partições:

# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/dev/pts
# umount /mnt/dev/shm
# umount /mnt/dev
# umount /mnt/run
# umount /mnt/tmp
# umount /mnt/boot/
# umount /mnt/

Agora, só botar para o pc iniciar pelo pendrive e “correr para o abraço”! 😀
Configuração dos serviços, hardening e otimização do filesystem no pendrive ficará para os próximos post.

2011, 2012 e …

Há algum tempo penso em publicar algo e consequentemente, se realmente consigo manter um blog.
Creio que seja necessário um pouco de foco e dedicação, pois, publicar não é fácil!

Expor o dia-a-dia é um tanto “invasivo”, mas utilizo para um balanço (mental) do ano que passou.
Desta forma, para me auxiliar neste balanço o ideal seria escrever um resumo de 2011 e 2012, forçando a lembrar-me das conquistas e dos “sofrimentos” durante toda a jornada.

Em 2011 consegui muitas vitórias, casei, mudei para um emprego melhor, palestrei na 5ª edição do ENSL e concluí a Pós Graduação.
Analisando bem as principais conquistas, a que poderia trazer algum benefício e não foi tão boa quanto esperava foi a Pós, pois, nada de novo foi apresentado e praticamente foi uma revisão da graduação… Dinheiro jogado no lixo, ao meu ver!

Desta forma temos que tirar algo de bom, e nisto, creio que o meu trabalho de conclusão tenha sido o lado bom, pois a partir dele consegui aprender um pouco mais sobre segurança e elaborar algo para a palestra do ENSL, onde falei sobre hardening e um projeto de melhorias de segurança para a distribuição Arch Linux.

Este projeto foi um ponto de partida para contribuir com a distribuição, que para mim foi interessante, sendo que o mesmo parou no tempo – e acabei não divulgando nada sobre o mesmo que pudesse ser agregado ou até integrado a distribuição – por falta de paciência e que será retomado inicialmente na forma de documentação, depois passando para o Sheriff, desenvolvido pelo Paulo Matias e por fim usando HnTool, desenvolvido pelo Hugo Doria. Para isso estou retomando os estudos de programação e desta vez espero que não pare.

O evento em si (ENSL), foi bom por ter sido acompanhado pela galera genial e divertida de sempre, porém o evento deixou a desejar, poucas pessoas compareceram ao evento e as palestras que mais tiveram gente foram do COALTI, evento que acontecia em paralelo.
Na minha palestra apareceram pessoas que estavam afim de conhecer a distribuição e que queriam ver o projeto de segurança que estava elaborando para a distribuição, creio que a palestra tenha sido boa!

Preciso melhorar nessas apresentações, pois fico bastante nervoso e muita informação acabo esquecendo de passar!
A palestra pode ser visualizada aqui e o meu trabalho da graduação aqui. Espero que gostem!

As mais importantes e significativas que mudaram bastante minha vida foram, casar e mudar de emprego!
Gostaria de agradecer principalmente a Hugo Doria e Anderson Duarte, por ajudarem a conseguir esse emprego e Fillipe Rodrigues e Igor Mendonça, por dividirem o apartamento.

Basicamente este foi o ano de 2011.

Já em 2012 a coisa não foi muito “flores” e resumiu basicamente em turbulências, muito trabalho e mudanças de apartamento pra lá e pra cá, redução de várias coisas e principalmente de gastos, apesar de 2011 ter sido de vitórias, 2012 foi de firmação e luta para manter o que tinha conquistado.

E as coisas boas foram bem básicas como mobiliar o ap e comprar os equipamentos “montar” o meu NAS/HTPC, que terá um post para mostrar como configurei e o que precisei fazer para transformá-lo. x)

Estes foram meus 2011 e 2012… Podem ser poucas conquistas, mas foram com muita luta e suor, não foi fácil!
2013, lutar para manter o que conquistei nos últimos anos e buscar melhorias profissionais e pessoais!
Lutar agora pelos meus objetivos profissionais que são LPIC-2, RHCE e voltar a programar (também são pessoais e dizer para mim mesmo que posso alcançar tudo aquilo que pretendo conquistar)!

Ah!, ia esquecendo… As pessoais já estão acontecendo, vou ser pai! 😛
O sentimento era de medo ao saber e agora é de ansiedade!

Updates mais confiáveis??

Vejo que muitos acabam reclamando de updates no Arch e não é de hoje, eu mesmo já reclamei!!!
Então com o tempo acabamos criando uma rotina de preparação para qualquer tipo de update no Arch Linux.

Abaixo detalho um pouco sobre os passos que realizo para um update consistente e confiável, UTILIZANDO APENAS OS REPOSITÓRIOS ESTÁVEIS (core, extra e community).

Primeiro passo, realizar o download de todos os pacotes:

# pacman -Syuw

Enquanto realizo o download verifico as notícias no site do Arch Linux ou do Arch Linux Brasil com a intenção de verificar se existe algum update problemático ou um update major de algum pacote importante (Gnome, Xorg, LibreOffice, Kernel, etc…).

É interessante também verificar nos fóruns e listas do Arch Linux e Arch Linux Brasil, se alguém passou por algum problema em hardware igual ao seu.

Se ficou constatado que não existe nenhum inconveniente, realizo o update, e se algum problema foi encontrado, tento procurar por soluções tanto nos fóruns quanto nos bugs do Arch Linux.

Se você está usando alguma interface gráfica ou qualquer coisa do tipo, faça logout e vá para algum tty (CTRL+ALT+F1 por exemplo).

# rc.d stop gdm/kdm/afins
# pacman -Su

O pacman mostra o output de todos os pacotes que estão sendo atualizados, se você deixou passar algum, então veja no log do pacman (/var/log/pacman.log), pois se tiver algum update de arquivo de configuração (atualização ou adição de novas opções) é recomendável verificar o impacto disso no sistema.

Verifique também se existe algum .pacnew no sistema e realize um diff.

# cd /
# find ./ -iname *.pacnew
./boot/grub/menu.lst.pacnew
./etc/fstab.pacnew
./etc/login.defs.pacnew
./etc/gshadow.pacnew
./etc/pacman.d/mirrorlist.pacnew
./etc/group.pacnew
./etc/locale.gen.pacnew
./etc/abs.conf.pacnew
./etc/pacman.conf.pacnew
./etc/makepkg.conf.pacnew
./etc/mkinitcpio.conf.pacnew
./etc/rc.conf.pacnew

Vejam a quantidade de *.pacnew em meu sistema…
É altamente recomendável você dar uma olhada em todos e não deixar nada escapar.
Recomendo que ao finalizar a atualização dos arquivos de configuração você mova para algum diretório dentro do /root.

# mkdir pacnew_files
# mv /etc/*.pacnew pacnew_files

Finalizando este passo, verifique no /etc/rc.conf quais arquivos você pode desativar, tipo o daemon do GDM, para realizar o reboot após a atualização. Se você, estiver usando o inicializador via /etc/inittab, comente a linha e mande um reboot.

O intuito disso é você conseguir realizar o boot e verificar se tudo está OK antes de levantar sua interface gráfica sem ter algum problema…
Depois é só reativar os daemons e correr para o abraço.

Outro detalhe importante é, realizar os updates apenas 1 vez por semana.
Coisa que considero interessante para manter o sistema estável.

Agora, se você estiver usando testing!!
Além de realizar os passos descritos, temos que ter em mente o seguinte:

Todo e qualquer problema é de sua responsabilidade.
Realize updates todos os dias.
É fundamental que você reporte o problema, pesquise e divulge soluções.
Acompanhe toda e qualquer modificação através da lista Arch Linux Dev Public e fique de olho no bugs do Arch Linux.

Faça o que muitos não fazem, CONTRIBUA PARA MELHORAR O ARCH LINUX DEIXANDO-O MAIS ESTÁVEL REPORTANDO OS BUGS ENQUANTO USA O TESTING, no lugar de ficar reclamando e dizendo que a distribuição é uma merda.

Se não aguenta usar o testing, use as coisas estáveis e evite dores de cabeça.

Os desenvolvedores e projetos relacionados a distribuição agradecem!

Lembre-se…

Como Judd Vinet, o fundador do projeto Arch Linux falou: “[Arch Linux] is what you make it.”

Este é um dos posts dos quais vou falar sobre manter seu sistema estável e como melhorar a segurança do seu sistema.

E você o que faz pra manter tudo em ordem em seu sistema????

Como extender a memória usada pelo Oracle

Segue a baixo os passos que segui para realizar a tarefa.
Qualquer dúvida, favor utilizar os links das fontes as quais explicam tudo que é necessário para a tarefa.

Como usuário oracle:

Procure pelo SPFILE, já que o Oracle toda vez ao iniciar a instância, ele utilizará esse arquivo para coletar os dados dos parâmetros.

$ cd /opt/oracle/product/11gR2/db/dbs

Faça backup do init.ora e do spfile.ora

$ mkdir bkp
$ cp init.ora spfile.ora bkp

Agora vamos alterar algumas configurações do pfile, init.ora.
Como queremos disponibilizar mais memória para o segmento compartilhado, vamos para a parte interessante.
Veja a quantidade disponível como root:

# sysctl -a | grep shmmax

Já que temos 8 de ram, e queremos colocar 6g para o oracle usar, vamos começar a modificar o shmmax.

# umount /dev/shm2
# mount -t tmpfs shmfs -o size=6g /dev/shm@

Se por ventura precisar restartar o servidor ou tiver queda de energia, adicione ao fstab.

shmfs /dev/shm tmpfs size=6g 0 0
Salve, altere agora o /etc/sysctl.conf. Faça os calculos, 6*1024^3 e adicione.

kernel.shmmax = 6442450944
Pronto, reinicie o servidor e verifique se está tudo ok.

# df -h /dev/shm

Filesystem Size Used Avail Use% Mounted on
shmfs 6.0G 3.0G 3.1G 49% /dev/shm
# sysctl -a | grep shmmax

kernel.shmmax = 6442450944
Tudo ok, vamos para o banco…

Agora precisamos ajustar os 2 parâmetros do oracle… memory_max_target e memory_target!

Não sei o motivo (e também não pesquisei), mas ao colocar os 6gb para o oracle, o mesmo reclama.
Então só adicionei 5gb (5*1024^3), como pode ser visto:

$ cd /opt/oracle/product/11gR2/db/dbs
$ vim init.ora

*.memory_max_target=5368709120
*.memory_target=5368709120

Agora…

$ sqlplus /nolog
SQL> connect / as sysdba;
SQL> shutdown immediate;
SQL> startup force pfile=/opt/oracle/product/11gR2/db/dbs/init.ora nomount;

ORACLE instance started.

Database mounted.
Database opened.

Assim conseguimos montar e iniciar a instância, e criaremos agora o spfile a partir do novo pfile já configurado de forma correta.

SQL> create spfile from pfile;

File created.

Reinicie o oracle e verifique se está tudo ok, com os 5gb alocados.

SQL> show parameters memory_max_target
SQL> show parameters memory_target

Agora é botar o oracle para funcionar.
Essa modificação pode ser feito usando comandos direto no banco e usando pfile no lugar de spfile como descrito no link [1].

Fontes:

[1] http://oraclehack.blogspot.com/2010/07/memorymaxtarget-and-memorytarget.html
[2] http://kevinclosson.wordpress.com/2007/08/24/oracle11g-automatic-memory-management-part-ii-automatically-stupid/
[3] http://www.dba-oracle.com/t_ora_01102_cannot_mount_database_in_exclusive_mode.htm
[4] http://www.orafaq.com/forum/t/40030/0/
[5] http://www.dba-oracle.com/concepts/starting_database.htm
[6] http://download.oracle.com/docs/cd/B28359_01/server.111/b32009/appc_linux.htm
[7] http://www.oracle-base.com/articles/linux/LargeSGAOnLinux.php
[8] http://www.dicas-l.com.br/arquivo/semaforos_kernel_memoria_compartilhada_e_cia.php
[9] http://book.chinaunix.net/special/ebook/SLES9Administrators_Handbook/067232735X/ch07lev1sec4.html
[10] http://www.softpanorama.org/Commercial_linuxes/Performance_tuning/semaphore_and_shared_segment_kernel_parameters.shtml
[11] http://ocw.novell.com/suse-linux-enteprise-operating-system-migration/migrating-to-suse-linux-enterprise-server-9/3019_10_manual.pdf
[12] http://www.orafaq.com/wiki/Memory_target
[13] http://www.dba-oracle.com/sf_ora_27101_shared_memory_realm_does_not_exist.htm
[14] http://www.orafaq.com/forum/t/40030/0/

Balanceamento de 2 links no Endian Firewall

Instalei um firewall usando Endian, onde o mesmo tinha 2 links de acesso a internet.

Configure a interface que será o link principal, depois vá em:

Rede > Interfaces

E configure o outro link, normalmente.

O de 2mb, adicione apenas os serviços como e-mail e site.
E o outro de 20MB para acesso da rede local da seguinte forma:

Rede > Routing > Policy Routing e criei as regras.

Tudo que for da Lan, vá para o Link de 20mb.
Tudo que for da DMZ, vá para o Link de 2mb.

O problema apresentado foi, que o link de 20mb está saindo apenas com 2mb.
E analisando a saída de tráfego, é como se o link de 20mb estivesse saindo pela interface de 2mb, no caso a interface eth3, assim limitando a conexão.

Usando traceroute, route, ip route e iptables, para verificar se o Endian estava tratando corretamente as rotas, ficou evidente que ele não estava especificando as metricas das routas e nem mostrava o gateway do segundo link.

Para resolver esta questão, foi preciso logar como root via ssh e executar:

# route del default
# ip route add default equalize scope global nexthop via IP_LINK1 dev IF_LINK1 weight 1 nexthop via IP_LINK2 dev IF_LINK2 weight 1

Adicione no arquivo /var/efw/inithooks/start.local estes 2 comandos, espere alguns minutos após a execução destes comandos e verifique se está tudo ok.

Assim finalizo a série de posts sobre o Endian Firewall.

Fontes:

http://efwsupport.com/index.php?topic=854.0
http://www.efwsupport.com/index.php?topic=54.0
http://bugs.endian.com/view.php?id=2816
http://bugs.endian.com/view.php?id=1132
http://bugs.endian.com/view.php?id=444

Compilação no Endian.

A mais ou menos 9 meses, tive uma tarefa muito interessante de realizar.

Precisei configurar um Endian na versão 2.4.0, em uma máquina com 3 placas de rede, onde duas tinha chips da Agere Systems e outra era onboard.

As placas com chipset: Agere Systems ET-131x PCI-E Ethernet Controller, não tem suporte no endian, foi necessário compilar o driver específico para a mesma. Os procedimentos abaixo dão suporte necessário para fazer a compilação do driver.

Dar acesso a internet ao Endian:

# route add default gw 192.168.0.100
# echo “nameserver 192.168.0.251” > /etc/resolv.conf

Atualizar o Endian e mudar de repositório:

# efw-upgrade
# efw-upgrade -s

Escolha development, digite seu e-mail. Reboot!

Agora utilizando o smart para instalar o kernel-PAE, já que não consegui achar o kernel padrão para desenvolvimento.
O kernel PAE dá suporte a mais de 4GB de ram, de acordo com informações encontradas na internet.

# smart install kernel-PAE

Após executar este comando, ele irá remover o kernel padrão e algumas dependências e instalar o kernel PAE e as dependências necessárias, que são iguais a do kernel padrão.

Reboot!

Se iniciou normalmente, agora, faça um upgrade usando o efw-upgrade ou smart upgrade.
Agora vamos iniciar o processo de instalação dos pacotes necessários para compilação do driver.

Primeiro, baixar os pacotes/fontes do Endian 2.4 Community.

Vamos instalar alguns pacotes para nos ajudar nessa tarefa:

# rpm -Uvh http://archives.fedoraproject.org/pub/archive/fedora/linux/core/3/i386/os/Fedora/RPMS/info-4.7-5.i386.rpm
# rpm -Uvh http://archives.fedoraproject.org/pub/archive/fedora/linux/core/3/i386/os/Fedora/RPMS/wget-1.9.1-17.i386.rpm

Agora vamos baixar e descompactar os pacotes para permitir a compilação do driver:

# wget http://sourceforge.net/projects/efw/files/Development/EFW-2.4-RESPIN/EFW-COMMUNITY-2.4-devel-srpms.tar.gz/download
# tar -xvzf EFW-COMMUNITY-2.4-devel-srpms.tar.gz

Instalamos os pacotes necessários para a compilação:

# cd EFW-COMMUNITY-2.4-201006071652/RPMS/
# rpm -Uvh binutils-2.15.92.0.2-25.endian2.i586.rpm glibc-kernheaders-2.4-9.1.103.EL.endian1.i586.rpm patch-2.5.4-20.endian0.i586.rpm glibc-headers-2.3.4-2.41.endian8.i386.rpm glibc-extras-2.3.4-2.41.endian8.i386.rpm glibc-devel-2.3.4-2.41.endian8.i386.rpm libgomp-4.1.2-14.endian1.i586.rpm gcc4-4.1.2-14.endian1.i586.rpm make-3.81-3.endian0.i586.rpm cpp-3.4.6-10.endian8.i586.rpm autoconf-2.59-7.endian0.noarch.rpm automake-1.9.5-0.endian0.noarch.rpm m4-1.4.3-0.endian0.i386.rpm rpm-build-4.4.2.3-9.endian3.i586.rpm libstdc++-devel-3.4.6-10.endian8.i586.rpm

OBS.: A instalação do rpmbuild é apenas para manter a compatibilidade com o Endian, caso você queria gerar um .rpm do driver se o mesmo estiver conforme as exigências para criação do .rpm.

Criamos um link do gcc apontando para o gcc4:

# ln -s /usr/bin/gcc4 /usr/bin/gcc

Agora vamos trabalhar a compilação do driver, primeiro baixando o driver direto do sourceforge:

# wget -c http://sourceforge.net/projects/et131x/files/et131x-1.2.3-3%20Source/et131x/et131x-1.2.3-3.tar.gz/download

Descompactar e compilar o driver:

# tar -xvzf et131x-1.2.3-3.tar.gz
# cd et131x-1.2.3-3/
# make

Caso não apresente nenhum erro durante a compilação, instale o módulo no sistema:

# make modules_install

Carregue o módulo no sistema:

# gzip et131x.ko
# cp et131x.ko.gz /lib/modules/2.6.27.19-72.e25PAE/kernel/drivers/net/
# gunzip et131x.ko.gz
# insmod et131x.ko

Verifique com o comando dmesg e veja se driver foi carregado:

# dmesg

et131x: module license ‘BSD’ taints kernel.
10/100/1000 Base-T Ethernet Driver for the ET1310, v1.2.3 01/31/2006 15:40:00 by Agere Systems, http://www.agere.com
et131x 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
et131x 0000:01:00.0: setting latency timer to 64
# ifconfig eth1 up
# ifconfig eth2 up

Pronto! O dispositivo já devem aparecer na interface web!

OBS.: Caso você tenha realizado uma atualização e tenha apresentado problemas. Reinstale a versão 2.4.0 e não faça nenhuma atualização e realize os passos abaixo.

Faça o download dos pacotes chkconfig-1.3.11.2-1.i586.rpm initscripts-2.4.2-0.endian12.i586.rpm ipac-ng-1.33-2.endian7.i586.rpm iptables-1.4.8-1.endian16.i586.rpm, no site, http://updates.endian.org/stable/pool/ coloque seu e-mail e a senha community.

Depois execute os comandos a seguir:

# cd pacotes
# rpm -Uvh chkconfig-1.3.11.2-1.i586.rpm initscripts-2.4.2-0.endian12.i586.rpm ipac-ng-1.33-2.endian7.i586.rpm iptables-1.4.8-1.endian16.i586.rpm
# reboot

# cd EFW-COMMUNITY-2.4-201006071652/RPMS/
# rpm -e –nodeps kernel kernel-modem-drivers-2.4-15_2.6.27.19_72.e25.i586 kernel-module-openswan-2.6.24-4.endian9_2.6.27.19_72.e25.i586 kernel-module-r8168-8.016.00-3.endian4_2.6.27.19_72.e25.i586
# rpm -Uvh kernel-PAE-2.6.27.19-72.e25.i686.rpm kernel-PAE-devel-2.6.27.19-72.e25.i686.rpm kernel-modem-drivers-PAE-2.4-15_2.6.27.19_72.e25.i586.rpm kernel-module-openswan-PAE-2.6.24-4.endian9_2.6.27.19_72.e25.i586.rpm kernel-module-r8168-PAE-8.016.00-3.endian4_2.6.27.19_72.e25.i586.rpm
# reboot

Agora siga os passos iniciais para compilar o driver.

O log do firewall não estava funcionando.

Foi preciso atualizar o ulogd pra versão: ulogd-2.0.0-0.endian9.i586.rpm

Agora evite atualizações, pois você terá problemas com sua placa de rede e compatibilidade no sistema.

Dica, só compre placas que são suportadas pelo sistema.

Os Links utilizados como solução para a compilação do driver, foram:

http://blog.luizagostinho.com/?p=596
http://blog.luizagostinho.com/?p=733
http://efwsupport.com/index.php?topic=610
http://efwsupport.com/index.php?topic=1155.0
http://efwsupport.com/index.php?topic=1988.0
http://www.efwsupport.com/index.php?topic=628.0

Você pode ver essa solução no link:

http://endian.eth0.com.br/topic/placa-de-rede-com-chipset-agere-system#post-3317

Recomendo frequentar o fórum endian.eth0.com.br.

Vida nova, foco mantido.

Obrigado, leitor deste humilde blog, por sua visita.

Após um bom tempo sem escrever. resolvi colocar algumas novidades aqui neste espaço.

Depois de um bom tempo de namoro, casei no civil.
A responsabilidade aumenta, focos e metas são agregadas ao que já tinha em mente/vontade. E desde Maio que estou morando em Aracaju.

Finalmente consegui realizar mais um sonho em minha vida, morar em Aracaju.
Consegui um ótimo (para não dizer excelente) emprego.
E gostaria de agradecer a duas pessoas que foram fundamentais para tal feito.

Muito obrigado Hugo Doria e Anderson Rizada.
Muitos já conhecem Hugo, um cara excepcional. Posso dizer que ele é brother mesmo, desde 2005 que conheço essa figura, uso Arch (distribuição que amo) por ele ter me apresentado essa excelente (pelo menos para mim) distribuição.

Anderson Rizada, outro cara muito foda. Conheci Rizada em 2007 durante o II ENSOL, onde tive o prazer de apresentar o Arch para 9 pessoas (lembro como hoje) em uma palestra no evento.

Sem vocês, não conseguiria subir mais um degrau em minha vida.
Não posso esquecer da minha família, que deu e dá apoio nas decisões tomadas em minha vida.

Tinha alguns posts técnicos para postar aqui, mas acabei deixando de lado, vou tentar encontrar e compartilhar com todos.

Focos mantidos e dando rumo na vida que estou levando hoje.
Dê valor aos seus amigos e família, são as únicas pessoas que você pode contar.

Até, fiquem em paz e Happy Arching!

Problemas de Proxy com AD no Endian Firewall.

Ano passado, no mês novembro depois de vários dias tentando resolver um problema que estava tendo ao ingressar o Endian Firewall 2.4.0 no AD, para controlar as políticas de acesso da internet por grupos, consegui resolver o problema.

E aqui, descrevo como resolvi o problema, apesar desse tempo todo sem postar esta solução, a mesma se encontrava no fórum da comunidade brasileira do Endian, neste link e no Bugs do Endian, neste outro link.

A ocorrência deste bug, era um tanto inconsistente e foi meio complicado ter que reproduzir o mesmo, já que o firewall estava em produção.
Após várias tentantivas, análise de log, força de vontade e tempo, consegui parar os serviços e resolver esta pendência.

Depois de várias tentativas de aplicar as políticas de acesso no proxy o mesmo deixava de funcionar adequadamente, aplicando políticas erradas ou bloqueando tudo.

Depois de várias análises de log e de arquivos de configuração, ficou evidente que o problema estava no script restartdansguardian.py (feito em python).
O problema estava basicamente na listagem de diretórios, que estava sendo considerada como string.

Quando o número de content filters ultrapassava 9, chegando a 10 ou mais, a listagem ficava invertida, como descrito abaixo.

Listagem normal em numeral: 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10.

Listagem utilizando string: 1, 10, 2, 3, 4, 5, 6, 7, 8 e 9.

Isso fez com que o dansguardian gerasse as configurações de forma incorreta, jogando para a variável groupname um valor totalmente diferente das configurações do content filter.
Por exemplo, o arquivo de configuração dansguardianf10.conf responsável pelo grupo Segurança, tinha a variável groupname com o valor “Custo content2“.

A resolução do problema se deu, seguindo os seguintes passos, que deram norte para o debug do script python:

# ls -1 /etc/dansguardian/profiles/ [ Aqui ele mostra a listagem como se fosse string. ]
# ls -1 /etc/dansguardian/profiles/ | sed “s/^\(.\)$/0\1/” | sort | sed “s/^0\(.\)$/\1/” [ Aqui vimos como a listagem deveria ser. ]

OBS.: A listagem pode ser feita usando, sort -n.

Mesmo ao ler o script, não foi achado nada.
Ao executar o comando com a opção de debug, tivemos a resposta:

# restartdansguardian -d [ Mostrou onde se encontrava o erro do script. ]

Agora ao entrar no arquivo /usr/local/bin/restartdansguardian.py.

# vi /usr/local/bin/restartdansguardian.py

Procuramos pela linha que continha “.Include” e chegando a função, def getprofiles() responsável pela criação dos content filters.
O processo de debug se deu ao executar linha por linha da função getprofiles.

def getprofiles():
       if file_exists(DANSGUARDIAN_SETTINGS):
          profiles = glob(DANSGUARDIAN_SETTINGS)
      else:
          profiles = glob(DANSGUARDIAN_SETTINGS_DEFAULT)
      profiles += glob("%s/*/settings" % DANSGUARDIAN_PROFILES)
      profiles = sorted(map(lambda p: os.path.dirname(p), profiles))
      debug(profiles)
      return profiles

O processo.

# python

Python 2.4.6 (#1, Nov 10 2009, 07:02:03)
[GCC 3.4.6 20060404 (e 3.4.6-10.endian8)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import os
>>> import glob
>>> profile = glob.glob (“/var/efw/dansguardian/settings”)
>>> profiles = glob.glob (“/var/efw/dansguardian/settings”)
>>> profiles += glob.glob (“%s/*/settings” % “/var/efw/dansguardian/profiles”)
>>> profiles
[‘/var/efw/dansguardian/settings’, ‘/var/efw/dansguardian/profiles/content2/settings’,
‘/var/efw/dansguardian/profiles/content3/settings’, ‘/var/efw/dansguardian/profiles/content4/settings’,
‘/var/efw/dansguardian/profiles/content5/settings’, ‘/var/efw/dansguardian/profiles/content6/settings’,
‘/var/efw/dansguardian/profiles/content7/settings’, ‘/var/efw/dansguardian/profiles/content8/settings’,
‘/var/efw/dansguardian/profiles/content9/settings’, ‘/var/efw/dansguardian/profiles/content10/settings’,
‘/var/efw/dansguardian/profiles/content11/settings’, ‘/var/efw/dansguardian/profiles/content12/settings’,
‘/var/efw/dansguardian/profiles/content13/settings’, ‘/var/efw/dansguardian/profiles/content14/settings’,
‘/var/efw/dansguardian/profiles/content15/settings’, ‘/var/efw/dansguardian/profiles/content16/settings’]
>>> profiles = sorted(map(lambda p: os.path.dirname(p), profiles))
>>> profiles
[‘/var/efw/dansguardian’, ‘/var/efw/dansguardian/profiles/content10’,
‘/var/efw/dansguardian/profiles/content11’, ‘/var/efw/dansguardian/profiles/content12’,
‘/var/efw/dansguardian/profiles/content13’, ‘/var/efw/dansguardian/profiles/content14’,
‘/var/efw/dansguardian/profiles/content15’, ‘/var/efw/dansguardian/profiles/content16’,
‘/var/efw/dansguardian/profiles/content2’, ‘/var/efw/dansguardian/profiles/content3’,
‘/var/efw/dansguardian/profiles/content4’, ‘/var/efw/dansguardian/profiles/content5’,
‘/var/efw/dansguardian/profiles/content6’, ‘/var/efw/dansguardian/profiles/content7’,
‘/var/efw/dansguardian/profiles/content8’, ‘/var/efw/dansguardian/profiles/content9’]

A descoberta.

>>> profile = glob.glob (“/var/efw/dansguardian/settings”)
>>> profiles = glob.glob (“/var/efw/dansguardian/settings”)
>>> profiles += glob.glob (“%s/*/settings” % “/var/efw/dansguardian/profiles”)
>>> profiles
[‘/var/efw/dansguardian/settings’, ‘/var/efw/dansguardian/profiles/content2/settings’,
‘/var/efw/dansguardian/profiles/content3/settings’, ‘/var/efw/dansguardian/profiles/content4/settings’,
‘/var/efw/dansguardian/profiles/content5/settings’, ‘/var/efw/dansguardian/profiles/content6/settings’,
‘/var/efw/dansguardian/profiles/content7/settings’, ‘/var/efw/dansguardian/profiles/content8/settings’,
‘/var/efw/dansguardian/profiles/content9/settings’, ‘/var/efw/dansguardian/profiles/content10/settings’,
‘/var/efw/dansguardian/profiles/content11/settings’, ‘/var/efw/dansguardian/profiles/content12/settings’,
‘/var/efw/dansguardian/profiles/content13/settings’, ‘/var/efw/dansguardian/profiles/content14/settings’,
‘/var/efw/dansguardian/profiles/content15/settings’, ‘/var/efw/dansguardian/profiles/content16/settings’]
>>> profiles = map(lambda p: os.path.dirname(p), profiles)
>>> profiles
[‘/var/efw/dansguardian’, ‘/var/efw/dansguardian/profiles/content2’,
‘/var/efw/dansguardian/profiles/content3’, ‘/var/efw/dansguardian/profiles/content4’,
‘/var/efw/dansguardian/profiles/content5’, ‘/var/efw/dansguardian/profiles/content6’,
‘/var/efw/dansguardian/profiles/content7’, ‘/var/efw/dansguardian/profiles/content8’,
‘/var/efw/dansguardian/profiles/content9’, ‘/var/efw/dansguardian/profiles/content10’,
‘/var/efw/dansguardian/profiles/content11’, ‘/var/efw/dansguardian/profiles/content12’,
‘/var/efw/dansguardian/profiles/content13’, ‘/var/efw/dansguardian/profiles/content14’,
‘/var/efw/dansguardian/profiles/content15’, ‘/var/efw/dansguardian/profiles/content16’]
>>>

OBS.: The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell. (Tirado das referências do python.)

E ao debugar a linha 174 do script, temos o responsável pelo problema, o sorted.

A solução foi a seguinte. Substituímos a linha abaixo:

profiles = sorted(map(lambda p: os.path.dirname(p), profiles))

Por essas:

#profiles = sorted(map(lambda p: os.path.dirname(p), profiles))
profiles = map(lambda p: os.path.dirname(p), profiles)

Restart no dansguardian e verificamos que as políticas estavam corretas.
Testes foram realizados e mostraram que as políticas agora estavam sendo aplicadas corretamente.

Gostaria de agradecer ao Enderson Maia, que ajudou a debugar o script python. x)

Em brever, mais algumas coisas sobre Endian, Oracle e Arch Linux. Enjoy and happy Arching.