Archive for Dicas

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.

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????

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.

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.

Minha instalação e pós instalação.

No mês de dezembro de 2010, tive que trocar de placa mãe e de vídeo, depois de uma infelicidade ocorrida no meu antigo hardware que contava com uma placa mãe Intel DGP31BR e uma ATI HD RADEON 4550, onde um pequeno rato, entrou no gabinete e fez a festa.

Acabei mudando para uma Gigabyte G31M-ES2L e uma ATI HD RADEON 5670 e ao instalar o Arch, fiquei meio perdido pois, algumas coisas já tinha esquecido e para facilitar, criei um passo-a-passo da minha instalação para ter o sistema básico do Arch e depois, instalar o Xorg, Gnome e cia.

Como essa placa mãe tinha referência como pequeno prodígio das low-end onde coloquei meu processador Core 2 Duo e4500 de 2.2 Ghz para 2.4 Ghz, logo logo vai pra 2.6 e quem sabe 2.8 se tiver coragem de trocar de memória ram com mais qualidade e que aguente o tranco.

Vendo o Planeta Arch Linux Brasil mais especificamente este post do Berlotto, resolvi divulgar meu passo-a-passo.

Instalação

Pequeno lembrete, não irei aborda todo o processo de instalação vou só indicar o que fazer, se quiser saber como instalar o Arch veja este link, esta é a documentação mais atualizada até onde sei.

Inicialmente, após dar boot no computador pelo CD de instalação, escolha a opção referente a arquitetura que você está usando.

Depois que o cd de instalação carregar, logue no ambiente de instalação com o usuario root e execute os seguintes passos:

Alterar o teclado com o comando ‘loadkeys br-abnt2’ (podendo também, usar o comando ‘km’);
Execute o cfdisk, particione o seu HD;
Execute o script de setup com o comando ‘/arch/setup’;
Selecione os pontos de montagem e o tipo de filesystem;
Selecione os pacotes, depois instale;
Instale os pacotes;

Como o SISTEMA BÁSICO (grupo base) é usado quase que 100%, principalmente como dependência de algumas apps para desktop não removo nenhum pacote.
E também, como precisamos compilar alguns pacotes selecionamos junto com o grupo base, o grupo base-devel.
Caso você precise de mais algum pacote, fique atento após a seleção dos grupos base e base-devel, pois existem outros pacotes caso queira conferir, fique esperto.

Nesta parte, é necessario editar pelo menos dois arquivos: locale.gen e rc.conf, o ideal é editar todos que você ache essenciais.
Recomendo fazer uma configuração básica, apenas.

Configure o sistema;
Instale o GRUB;
Reboote o sistema;
Logue no sistema como root;

Verifique se precisa configurar o pacman ou mais alguma outra coisa;
Se você instalou usando o core (recomendo a instalação a partir do core), atualize a distribuição:

# pacman -Syu

Reboot;
Agora configure todo o sistema, conforme seu gosto e necessidade;
Como gosto do vim, vou instalar primeiro o pacote para poder continuar;

# pacman -Sy vim
# cp /usr/share/vim/vim73/vimrc_example.vim ~/.vimrc

Levante os módulos necessários no boot para ter uma inicialização mais rápida (principalmente no udev events):

# pacman -Sy hwdetect
# hwdetect –modules >> /etc/rc.conf

Agora edite o rc.conf e organize-o:

# vim /etc/rc.conf

Crie o usuário para usar o sistema:

# useradd -d /home/nome_do_usuario -m -G audio,wheel,storage,disk,log,optical,power,locate,tty,users,video -r -s /bin/bash nome_do_usuario
# passwd nome_do_usuario

Ao criar um novo usuário você já terá um SISTEMA BÁSICO, totalmente funcional e pronto para instalação de um ambiente gráfico.
Espero que vocês entendam o que é SISTEMA BÁSICO, pois todo dia vejo nego afirmando que Xorg e outras aplicações para desktop serem sistema básico e não são.
Fica a dica ai pro pessoal.

Ambiente Desktop

Vamos começar pelo som do sistema:

# pacman -Sy alsa-lib alsa-utils alsa-oss alsa-plugins
# alsaconf
# alsamixer
# alsactl store
# vim /etc/rc.conf (para adicionar o alsa na array DAEMON)

Como algumas aplicações ainda usam o HAL, vamos instalar alguns pacotes:

# pacman -Sy fam hal dbus

Adicione o fam, hal e dbus na array DAEMON, sempre seguindo a ordem correta dos serviços, hal precisa do dbus para iniciar.

# vim /etc/rc.conf
dbus to $DAEMONS
hal to $DAEMONS
fam to $DAEMONS

Inicie os serviços.

# /etc/rc.d/dbus start
# /etc/rc.d/hal start
# /etc/rc.d/fam start

Instale o Xorg:

Comece a instalação dos pacotes do Xorg e do synaptics (se estiver instalando em um notebook);

# pacman -Sy xorg xf86-input-synaptics xf86-input-mouse xf86-input-keyboard

Agora faça a instalação do driver de vídeo, no meu caso é a catalyst da amd (no desktop), proprietário;
É preciso baixar do AUR os pacotes catalyst-utils e catalyst;

$ cd catalyst-utils
$ makepkg -c
# pacman -U catalyst-utils-10.11-1-x86_64.pkg.tar.xz

Realize os procedimentos mostrados no pos-install do catalyst-utils e continue a instalação do driver;

$ cd ../catalyst
$ makepkg -c
# pacman -U catalyst-10.11-1-x86_64.pkg.tar.xz

OBS.: Como você vai usar o makepkg, configure o makepkg.conf para colocar o source do pacote em um mesmo lugar, evitando fazer downloads desnecessários.

Instale o qt para ter acesso ao “administrador” da placa de video;

# pacman -Sy qt

GNOME

Instalando o Gnome
Grupo Gnome

# pacman -Sy gnome

    * epiphany [TALVEZ]: webrowser do Gnome;
    * gnome-applets [SIM]: applet para as barras do Gnome;
    * gnome-backgrounds [SIM]: papeis de parede;
    * gnome-control-center [SIM]; centro de controle do Gnome;
    * gnome-desktop [SIM]: O desktop do Gnome;
    * gnome-icon-theme [SIM]: icones;
    * gnome-keyring [TALVEZ]: daemon gerenciador de senhas do GNOME;
    * gnome-media [SIM]: pacote multimidia do Gnome;
    * gnome-mime-data [SIM]: banco de tipos de arquivos;
    * gnome-panel [SIM]: painel de controle;
    * gnome-screensaver [SIM]: Controle de screensavers;
    * gnome-session [SIM]: gerenciador de sessoes;
    * gnome-settings-daemon [SIM]: gerenciamento de configuracao;
    * gnome-terminal [SIM]: terminal do gnome
    * gnome-themes [SIM]: temas;
    * gnome2-user-docs [SIM]: documentos sobre o Gnome;
    * metacity [SIM]: Gerenciador de janelas;
    * nautilus [SIM]: gerenciador de arquivos;
    * notification-daemon [SIM]: Framework de notificacoes
    * yelp [SIM]: sistema de ajuda.

Grupo Gnome-extra

# pacman -Sy gnome-extra
# pacman -Sy alacarte bug-buddy cheese deskbar-applet eog evince file-roller gcalctool gconf-editor gdm gedit gnome-audio gnome-netstatus  gnome-nettool gnome-power-manager gnome-system-monitor gnome-utils gucharmap hamster-applet mousetweaks nautilus-sendto seahorse seahorse-plugins sound-juicer totem zenity

    * alacarte [SIM]: editor de menus do Gnome;
    * bug-buddy [TALVEZ]: reportador de bugs;
    * cheese [TALVEZ]: programa para webcam;
    * dasher [NAO]: interface de entrada para pessoas com necessidades especiais;
    * deskbar-applet [SIM]: barra de pesquisa tudo-em-um da barra do Gnome;
    * ekiga [NAO]: Videoconferencia do Gnome (GnomeMeeting);
    * empathy [SIM]: IM;
    * eog [SIM]: eye of Gnome, visualizador de imagens;
    * evince [SIM]: vizualizador de pdf;
    * evolution [NAO]: cliente de mensagens instantâneas;
    * evolution-exchange [NAO]: conector Evolution – MS Exchange;
    * evolution-webcal [NAO]: gerenciador de calendarios web;
    * file-roller [SIM]: manipulador de arquivos compactador;
    * gcalctool [SIM]: calculadora;
    * gconf-editor [SIM]: configurador do Gnome;
    * gdm [SIM]: gerenciador de login do Gnome;
    * gedit [SIM]: editor de texto simples;
    * gnome-audio [SIM]: efeitos sonoros do Gnome;
    * gnome-games [NAO]: jogos;
    * gnome-games-extra-data [NAO]: Dados para os jogos;
    * gnome-mag [NAO]: lente de aumento;
    * gnome-netstatus [SIM]: applet que mostra o status da rede;
    * gnome-nettools [SIM]: ferramente de rede;
    * gnome-power-manager [SIM]: gerenciador de energia;
    * gnome-system-monitor [SIM]: mostra o estado do seu sistema;
    * gnome-utils [SIM]: utilitarios diversos;
    * gok [NAO]: teclado virtual;
    * gucharmap [SIM]: mapa de caracteres;
    * hamster-applet [SIM]: aplicativo de gerenciamento de tempo;
    * libgail-gnome [NAO]: GNOME Accessibility Implementation Library;
    * mousetweaks [SIM]: melhorias de acessibilidade de mouse;
    * nautilus-sendto [SIM]: Nautilus context menu for sending files;
    * orca [NAO]: leitor de tela;
    * seahorse [SIM]: gerenciador de chaves PGP;
    * seahorse-plugins [SIM]:
    * sound-juicer [SIM]: ripador de CDs de audio;
    * tomboy [NAO]: gerenciador de notas rapidas;
    * totem [SIM]: tocador de medias;
    * vinagre [NAO]: cliente VNC;
    * vino [NAO]: servidor VNC;
    * zenity [SIM]: framework de janelas de dialogo;

Pacotes extras para o gnome

# pacman -Sy gnome-system-tools

Complementos do ambiente gráfico

# pacman -Sy gstreamer0.10-plugins

Instalando fontes do ambiente gráfico

# pacman -Sy ttf-dejavu ttf-bitstream-vera

Instalando descompactadores

# pacman -Sy unrar unzip p7zip

Softwares dicionais

# pacman -Sy firefox xchat pidgin chromium emesene
# pacman -Sy vlc comix rhythmbox
# pacman -Sy ntfs-3g
# pacman -Sy thunderbird
# pacman -Sy jre jdk vuze
# pacman -Sy libreoffice libreoffice-extensions (lembre-se libreoffice-extensions é um grupo)
# pacman -Sy abs

Depois disso adicione o módulo fuse na array MODULES do rc.conf e veja qual daemon do avahi vai adicionar a array DAEMON.

# vim /etc/rc.conf
fuse to $MODULES
avahi-daemon to $DAEMONS

Adicionando usuario aos grupos adicionais

# gpasswd -a nome_do_usuario camera,dbus,hal,stb-admin

Do AUR

    * ttf-ms-fonts;
    * flashplugin-prerelease;
    * virtualbox_bin;
    * pms;
    * dropbox

Se você está instalando em um notebook, recomendo o uso do wicd para gerenciar suas interfaces:

# pacman -Sy wicd

Tenha certeza que seu usuario esta no grupo network, e entao abra o /etc/rc.conf e altere a linha:

INTERFACES=(eth0)

Para:

INTERFACES=(!eth0)

E na ultima linha, adicione os servicos, ela deve estar assim:

DAEMONS=(… !network wicd gdm)

Note a ! na frente de network, isso ira desabilitar este servico, salve e feche o arquivo e reinicie o computador.

Algumas observações:

O Teclado no gnome é configurado apartir do GDM ou após a inicialização dele.
Recomendo configurar apartir do GDM, pois ao entrar com a senha, o teclado já vai estar ok.

Se os icones do menu Sistema do gnome não aparecerem execute os seguintes passos:

Application >> System Tools >> Configuration Editor, /desktop/gnome/interface/ e habilite “menus_have_icons”.

Qualquer coisas estranha, verifique primeiro neste link: https://wiki.archlinux.org/index.php/GNOME_2.28_Changes

Bom, é isso. Se tiverem alguma sugestão ou crítica, podem mandar nos comentários.
Até a próxima.

Nota de utilidade pública.

Bom dia senhores, estou meio off em relação ao blog, mas isso é por bons motivos (pelo menos para a minha pessoa) e em breve estarei postando coisas boas aqui neste cantinho. x)

O motivo deste tópico foi para tentar avisar as pessoas do email que recebi.
Assino uma lista, e recebi um e-mail um tanto preocupante, veja o e-mail e tire suas conclusões, quem conhecer essas pessoas, por favor, avisem.

Saudações,

Preciso falar urgentemente com os Classificados Excedentes do Concurso UFS
de 2008 (para o cargo de Analista de TI), do Edital 13/2008, listados nesse
link:
http://www.ccv.ufs.br/concursogrh/resultado/classificados/cs05.txt
principalmente com:

FABRICIO FERNANDES DE OLIVEIRA DALTRO – 15o.
FELIPE DE OLIVEIRA LIMA – 17o.
RODRIGO GUSMAO DE CARVALHO ROCHA – 18o.
RODRIGO ANDRADE ROCHA DE ALMEIDA – 19o.
HARLEI VASCONCELOS ROSA – 20o.

O concurso ainda está vigente até meados de junho de 2010 (foi prorrogado no
ano passado) mas a Universidade está querendo licitar serviço terceirizado
através do *pregão eletrônico 157/2009* ferindo, portanto, a legislação, já
que nenhum serviço terceirizado referente a cargo de concurso que ainda
esteja em vigência pode ser licitado, pelo menos até o fim da vigência do
concurso se ainda houver classificados excedentes, o que é o caso desse
concurso.

Aqui o Edital de Licitação do Pregão 157/2009:
http://www.ufs.br/editais/125854215174.zip

Aqui as informações do Pregão, que será aberto agora dia 02/12, no site da
UFS:
http://www.ufs.br/?pg=licitacao&id=1085

Por favor, divulguem isso nas comunidades do concurso da UFS existentes no
orkut e em outras redes sociais, para que possamos ganhar força e que
quaisquer interesses diversos não possam sobrepujar o direito dos cidadãos.

Omiti o nome do autor do e-mail, com o intuito de evitar problemas… Como disse, por favor, avisem a essas pessoas se vocês conhecerem.

PS.: Em breve novidades. x)

Leitura do mês!

Durante o SFD em Aracaju, fui ao Shopping Rio Mar (acho que é esse o nome), e acabei comprando o primeiro livro que vi e já fazia um tempo que estava querendo comprar, é um pouco “velho”. Mas a leitura é recomendada.

O livro “A cabeça de Steve Jobs – As lições do líder da empresa mais revolucionária do mundo” de Leander Kahney.

A cabeça de Steve Jobs

Façam bom proveito da leitura.