Vendo a chegada do novo release, 7.0, resolvi encarar o upgrade. Uma das novas características que chamou mais minha atenção foi o novo algoritmo escalonador, ULE, não ativo por padrão, mas através da configuração de kernel:
OPTION SCHED_ULE
Sua interação com sistemas multimídia é realmente melhor em quesitos de resposta, algo que supreendeu até em relação ao scheduler do Linux, também capaz tem preempção tempo-real para esse tipo de aplicação.
Apesar de já portado para o também embrionário FreeBSD-6.3, outras vantagens me fizeram optar pelo upgrade (um parto bem doloroso, diga-se de passagem e descrito mais adiante) como suporte melhorados a novos drivers, que fez com que minha interface FastEthernet USB, USB200M, funcionasse sem nenhuma configuração adicional, simplesmente plugando. Esse não foi o único dispositivo, também minhas interfaces wireless USB da Belkin passaram a funcionar sem o uso do ndiswrapper.
Logo de início minha felicidade foi infinita e tive a sensação de ter dado um passo na direção certa ao fazer o upgrade para a versão CURRENT (isso foi em finados de dezembro, antes do lançamento do RC1). Não durou mais que o tempo necessário para começar a descobrir várias aplicações não funcionando corretamente.
Uma das melhores aquisições em minhas viagens foi o HD externo de 160 GB da Iomega. Pequeno, leve e suportado pelo FreeBSD:
umass0: Iomega Iomega HDD USB2.0 Drive, rev 2.00/2.40, addr 2
da0 at umass-sim0 bus 0 target 0 lun 0
da0: Fixed Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
Ao formatar, decidi criar uma instalação de Ubuntu sobre o mesmo, utilizando uma partição (da0s1) como raiz, outra (da0s2) maior como home, uma para troca com usuários de windows (da0s6) e uma última com o que sobrou (da0s7), que ficou como "/mnt/ots".
Utilizando o fdisk-linux, disponível no ports, é possível criar e depois visualizar as partições.
musashi# fdisk-linux -l /dev/da0
Disk /dev/da0: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/da0s1 1 608 4883728+ 83 Linux
/dev/da0s2 609 12766 97659135 83 Linux
/dev/da0s3 12767 19457 53745457+ 5 Extended
/dev/da0s5 12767 12888 979933+ 82 Linux swap
/dev/da0s6 18242 19457 9767488+ b Win95 FAT32
/dev/da0s7 12889 18241 42997941 83 Linux
Partition table entries are not in disk order
Sendo que o tipo Ext3 (Journalling) é suportado pelo FreeBSD, nada melhor que o utilizar para guardar os dados, fazendo todo sincronismo de UFS para Ext3 e tendo um sistema backup, em Linux, disponível no HD externo.
Para fazer o mount/umount, criei um pequeno script, que segue abaixo, já que o sistema de automount não reconheçe perfeitamente os devices e respectivos pontos de montagem, fora o fato do mesmo alterar a posição de da0 para da1 ou qualquer outro da, dependendo de qual outro dispositivo estiver conectado.
#! /bin/sh
case $1 in
-m) ;;
-u) ;;
*) echo "Use: $0 [-m|-u]"
echo " -m: mount disks "
echo " -u: umount disks "
exit 1
;;
esac
echo "Finding Iomega"
### Finding device
umass=`dmesg | grep -i iomega | tail -1|awk -F":" '{print $1}'`
umass_id=`echo $umass | sed 's/umass//'`
device=`dmesg | grep "umass-sim$umass_id" | tail -1 |awk '{print $1}'`
if [ ! $umass_id ] ; then
echo "Impossible to find Iomega device"
exit 1
fi
case $1 in
-m) echo "Checking partitions"
for id in 1 2 7
do
fsck.ext3 -y /dev/${device}s${id}
done
for id in 6
do
fsck_msdosfs -y /dev/${device}s${id}
done
echo "Mounting partitions"
mount | grep "/dev/${device}s1" > /dev/null 2>&1
if [ $? -ne 0 ]; then
mount_ext2fs /dev/${device}s1 /mnt/ext2
fi
mount | grep "/dev/${device}s2" > /dev/null 2>&1
if [ $? -ne 0 ]; then
mount_ext2fs /dev/${device}s2 /mnt/ext2/home
fi
mount | grep "/dev/${device}s7" > /dev/null 2>&1
if [ $? -ne 0 ]; then
mount_ext2fs /dev/${device}s7 /mnt/ext2/mnt/ots
fi
mount | grep "/dev/${device}s6" > /dev/null 2>&1
if [ $? -ne 0 ]; then
mount_msdosfs -u 1000 -g 100 -o longnames -m 777 /dev/${device}s6 /mnt/msdos
fi
;;
-u) for dir in msdos ext2/mnt/ots ext2/home ext2
do
echo "Umounting: /mnt/$dir"
umount /mnt/$dir
done
;;
esac
Finalmente aumentei meu arsenal de brinquedos. Novo PSP Slim. Conexão WLAN e USB. Através dessa, funciona perfeitamente com BSD:
umass0: Sony "PSP" Type A, rev 2.00/1.00, addr 2
da0 at umass-sim0 bus 0 target 0 lun 0 da0:
Removable Direct Access SCSI-0 device da0: 40.000MB/s transfers
da0: 61MB (126848 512 byte sectors: 64H 32S/T 61C)
Pode ser acessado com:
mount_msdosfs -o longnames -m 777 /dev/da0s1 /mnt/PSP
Minha diversão agora é tentar acertar a codificação de filmes para assistir no PSP, já que o mesmo tem saída pra TV (e claro que comprei o cabo :-).
A melhor dica que encontrei foi em:
Tentei fazer um resample de um vídeo para adequar ao PSP, mas falhou com o seguinte erro:
helio@musashi:torrents$ ffmpeg -i Video.mp4 -r 29 -b 768k -ar 24000 -ab 64k -s 320x240 M4V00001.MP4
FFmpeg version SVN-r10657, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --cc=cc --prefix=/usr/local --make=gmake --disable-debug --enable-memalign-hack --enable-shared --enable-pp
--extra-cflags=-I/usr/local/include/vorbis -msse -I/usr/local/include --extra-ldflags=-L/usr/local/lib -la52 --extra-libs=-pthread
--enable-gpl --enable-pthreads --mandir=/usr/local/man --enable-liba52 --enable-liba52bin --enable-libfaad --enable-libfaadbin
--enable-libgsm --enable-libmp3lame --enable-libogg --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid
libavutil version: 49.5.0
libavcodec version: 51.44.0
libavformat version: 51.14.0
built on Nov 17 2007 21:27:40, gcc: 3.4.6 [FreeBSD] 20060305
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Video.mp4': Duration: 01:38:49.8, start: 0.000000, bitrate: 775 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 320x176, 25.00 fps(r) Stream #0.1(eng): Audio: mpeg4aac, 48000 Hz, stereo
File 'M4V00001.MP4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'M4V00001.MP4': Stream #0.0(eng): Video: mpeg4, yuv420p, 320x240, q=2-31, 768 kb/s, 29.00 fps(c)
Stream #0.1(eng): Audio: 0x0000, 24000 Hz, stereo, 64 kb/s
Stream mapping: Stream #0.0 -> #0.0 Stream #0.1 -> #0.1
Compiler did not align stack variables. Libavcodec has been miscompiled and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2.
Do not report crashes to FFmpeg developers.
Unsupported codec for output stream #0.1
Consegui arrumar refazendo a instalação do ffmpeg via ports:
root@musashi# cd /usr/ports/multimedia/ffmpeg root@musashi# env CC=gcc4.2 make build deinstall install clean
Com isso o filme foi resampleado (existe isso?), mas não foi aceito no PSP... brinquedo novo é assim :-)
-rwxr-xr-x 1 helio users 1555 Nov 4 2001 nsbm2html
-rwxr-xr-x 1 helio users 154 Oct 4 2001 admin-linux-br
-rwx------ 1 helio users 49 May 6 2001 pop.secure.sh
-rwxr-xr-x 1 helio users 651 Dec 7 2000 housemailer.sh
-rwxr-xr-x 1 helio users 1044 Oct 29 1997 getmail.sh
Esse getmail.sh foi realmente meu primeiro script...
Da última compilação de kernel:
Copyright (c) 1992-2007 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 6.3-PRERELEASE #1: Sat Nov 10 13:01:13 CST 2007 root@musashi:/usr/src/sys/i386/compile/GENERIC
WARNING: MPSAFE network stack disabled, expect reduced performance.
ACPI APIC Table: Timecounter "i8254" frequency 1193182 Hz quality
0 CPU: Intel(R) Pentium(R) M processor 1.73GHz (1729.18-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0x6d8 Stepping = 8
[...]
A tag 6.3-PRERELEASE já diz tudo. Se bem que eu provavelmente vá pular direto pro release 7.0... mais emocionante.