arquivo

Arquivo da tag: linux

Hello friends!

Today is 2016/08/25, 25 years of Linux! Happy Birthday!! 😀 😀

Today we gonna talk about how to upgrade a Slackware, we will use just the official slackware package management tool (slackpkg), lets upgrade a slackware 14.2 to a -current for example (this also works with other versions too, but try upgrade to the next always or deal with consequences).

What is slackpkg?

Slackpkg is a system package management tool developed by PiterPunk and oficially supported by Slackware, some of the most common subcommands are:

slackpkg update          -> synchronize with your mirror 
slackpkg search package  -> looks for 'package' into mirror
slackpkg install package -> install 'package' from mirror
slackpkg upgrade package -> upgrade 'package' from mirror
slackpkg upgrade-all     -> upgrade all packages installed
slackpkg install-new     -> install new software available in repository

First, install and upgrade your slackpkg

# slackpkg update  #(choose a mirror in /etc/slackpkg/mirrors)
# slackpkg upgrade slackpkg

I like the TDS Mirror but you can choice any -current mirror you like there. Then add the kernel packages into blacklist (/etc/slackpkg/blacklist) make sure that looks like this:

#kernel-firmware
#kernel-generic
#kernel-generic-smp
#kernel-headers
#kernel-huge
#kernel-huge-smp
#kernel-modules
#kernel-modules-smp
#kernel-source

(this is not totally necessary but I like to upgrade kernels after upgrade all other softwares)

Second, then upgrade your glibc-solibs, this is EXTREMELY NECESSARY to not crash your system after some upgrades of software.

# slackpkg upgrade glibc-solibs

Third, install and upgrade all your new software

# slackpkg install-new
# slackpkg upgrade-all

Kernel

Now, if you dont build your kernel youself, uncomment lines of blacklist (/etc/slackpkg/blacklist) to build the new kernel of Slackware repository. Check your lilo.conf or grub and apply the new kernel if you like (take care here, confirm that a new kernel was installed and check the images)

# cp /boot/vmlinuz /boot/vmlinuz-backup
# sed -i '/#kernel/s/^#//g' /etc/slackpkg/blacklist
# slackpkg upgrade-all 
# vim /etc/lilo.conf

The huge.s Slackware default kernel (built-in) have a lot of issues when we need use some softwares that require some modules/built-in by default, an example is the Docker. (huge.s default slackware kernel doesn’t support Docker very good). So you can choose use the generic kernel that has almost any module to load after boot the kernel, solving some of these issues. If you choose to do that, type the commands below, if you dont know what are you doing skip this part and use default /boot/vmlinuz.

# /usr/share/mkinitrd/mkinitrd_command_generator.sh 
mkinitrd -c -k 4.4.16 -f ext4 -r /dev/sda1 -m xhci-pci:ohci-pci:ehci-pci:xhci-hcd:uhci-hcd:ehci-hcd:hid:usbhid:i2c-hid:hid_generic:hid-cherry:hid-logitech:hid-logitech-dj:hid-logitech-hidpp:hid-lenovo:hid-microsoft:hid_multitouch:jbd2:mbcache:ext4 -u -o /boot/initrd.gz
(this will generate this command to build a initrd.gz image, run this)
(it also, of course, creates '/boot/initrd.gz' with your def modules)
# vim /etc/lilo.conf # or your grub. i dont use this
(put your initrd image here and choice a vmlinuz-generic as default image)

Your lilo.conf should now look like this (tip: create another entry with old kernel, so if this fail to boot you can boot with the older)

image = /boot/vmlinuz-generic  # re-check if you use vmlinuz
 root = /dev/sda1              # change if not your root disk
 initrd = /boot/initrd.gz
 label = Slack64-Generic
 read-only
image = /boot/vmlinuz-backup
 root = /dev/sda1
 label = Slack64-Okay
 read-only

Then save your MBR and reboot your system!

# lilo -v  (check this with attention)
# reboot

And welcome to the -current version of Slackware, keep it upgraded 🙂

Hello friends, I’ve been using KVM a lot of months until now and every new host server that I create I need to change the way of how Slackware seems to create cgroups, libvirt doesn’t function very good if you don’t create specific directories in ‘/sys/fs/cgroup’ tree. So, to do that for me I made this script below

# cat /etc/rc.d/rc.cgroup

#!/bin/sh
#
# /etc/rc.d/rc.cgroup: cgroups init script
# Alexandre Mulatinho <alex@mulatinho.net>
# Unmount /sys/fs/cgroup
umount /sys/fs/cgroup

# Mount cgroup_root in /sys/fs/cgroup
mount -t tmpfs -o mode=755,rw cgroup_root /sys/fs/cgroup/

# Mount all the subsystems available in /sys/fs/cgroup as individual directory
for i in $(lssubsys -a | sed -e 's/,/ /g');
do
    mkdir -pv /sys/fs/cgroup/$i
    mount -v -t cgroup -o $i $i /sys/fs/cgroup/$i
done

# chmod u+x /etc/rc.d/rc.cgroup

And now everytime my slackware system boot, my cgroups tree are build in right way that KVM and libvirt can use him to manipulate things like memory, cpu, io, disk, etc. Hope it helps someone else 🙂

About two or three years ago I met the SlackBuilds Project on a mail list and learned to love it! As all slack users know, the philosophy of our distribution is the principle of KISS (Keep It Simple Stupid) and the strong support for developers.

What I don’t understand is why some other slackwares don’t know and/or use the SlackBuilds git tree in his local system to build packages, one in twelve times that I look for some cool app I do not found there, so I decide to put here some of what I do to build at least 70% of my packages.

1. First download all the slackbuilds git tree to your local file system.

$ git clone git://slackbuilds.org/slackbuilds.git

2. Keep updated!

$ cd slackbuilds && git fetch origin && git pull

3. Browse your options by category

slackbuilds# ls -l
total 416
-rw-r--r-- 1 root root 233080 Nov 11 20:24 ChangeLog.txt
-rw-r--r-- 1 root root 258 Sep 15 2013 README
drwxr-xr-x 189 root root 4096 Nov 11 20:24 academic/
drwxr-xr-x 15 root root 4096 Apr 13 2014 accessibility/
drwxr-xr-x 268 root root 12288 Oct 17 22:27 audio/
drwxr-xr-x 12 root root 4096 Oct 17 22:27 business/
drwxr-xr-x 286 root root 12288 Oct 17 22:27 desktop/
drwxr-xr-x 401 root root 12288 Nov 11 20:24 development/
drwxr-xr-x 374 root root 12288 Oct 17 22:27 games/
drwxr-xr-x 46 root root 4096 Oct 17 22:27 gis/
drwxr-xr-x 184 root root 4096 Nov 11 20:24 graphics/
drwxr-xr-x 41 root root 4096 Oct 17 22:27 ham/
drwxr-xr-x 87 root root 4096 Apr 13 2014 haskell/
drwxr-xr-x 728 root root 20480 Nov 11 20:24 libraries/
drwxr-xr-x 141 root root 4096 Nov 11 20:24 misc/
drwxr-xr-x 162 root root 4096 Nov 11 20:24 multimedia/
drwxr-xr-x 520 root root 20480 Nov 11 20:24 network/
drwxr-xr-x 146 root root 4096 Oct 17 22:27 office/
drwxr-xr-x 333 root root 20480 Nov 11 20:24 perl/
drwxr-xr-x 270 root root 12288 Nov 11 20:24 python/
drwxr-xr-x 14 root root 4096 Oct 17 22:27 ruby/
drwxr-xr-x 582 root root 20480 Nov 11 20:24 system/

4. Search and see the directory structure

slackbuilds# find . -iname '*vlc*'
./multimedia/vlc
./multimedia/vlc/vlc.info
./multimedia/vlc/vlc.SlackBuild
slackbuilds# cd multimedia/vlc/
slackbuilds/multimedia/vlc# ls
README doinst.sh.in patch-freerdp.diff patch-projectM-fontpath.diff slack-desc vlc.SlackBuild vlc.info

5. Install with just three commands

# source *info; wget -c $DOWNLOAD; sh *SlackBuild

And that’s it! It will generate a .t?z package of slackware on ‘/tmp’ directory to you run ‘installpkg’ permitting you to run the binary/script installed. Easy and cool way to find your packages quickly and compile them with your architecture optimized.

# upgradepkg --reinstall --install-new /tmp/SBo/*vlc*

And if I can’t find my package there!?
Can you build yourself this new package? Why not? A slackbuild is just a basic shell script and in this case have almost the same code of all others, you just need to change a few things to make your Slackbuild script too, and perhaps put they on github or something like that,

You just need four files! Like in the example below with ‘gmrun’:

$ README gmrun.SlackBuild gmrun.info slack-desc

Lets look a sample of ‘.info’ file

PRGNAM="gmrun"
VERSION="0.9.2"
HOMEPAGE="http://sourceforge.net/projects/gmrun/"
DOWNLOAD="http://downloads.sourceforge.net/gmrun/gmrun-0.9.2.tar.gz"
MD5SUM="6cef37a968006d9496fc56a7099c603c"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="Binh Nguyen"
EMAIL="binhnguyen@fastmail.fm"
APPROVED="rworkman"

Now take a look into ‘slack-desc’ file

# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in.  You must
# make exactly 11 lines for the formatting to be correct.  It's also
# customary to leave one space after the ':'.

     |-----handy-ruler----------------------------------------------------|
gmrun: gmrun (A simple program which provides a run program window)
gmrun:
gmrun: gmrun is a simple GTK program which provides a "run program" window.
gmrun: It features a bash-like TAB completion, Ctrl-R/Ctrl-S for searching
gmrun: through the history and URL handlers for any user defined prefix.
gmrun:
gmrun: Homepage: http://sourceforge.net/projects/gmrun/
gmrun:
gmrun:
gmrun:
gmrun:

And finally into an .SlackBuild file

#!/bin/sh

PRGNAM=gmrun
VERSION=${VERSION:-0.9.2}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i486 ;;
    arm*) export ARCH=arm ;;
       *) export ARCH=$( uname -m ) ;;
  esac
fi

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -eu

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION

chown -R root:root .
find -L . 
 ( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 
  -o -perm 511 ) -exec chmod 755 {} ; -o 
 ( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 
 -o -perm 440 -o -perm 400 ) -exec chmod 644 {} ;

CFLAGS="$SLKCFLAGS" 
./configure 
  --prefix=/usr 
  --libdir=/usr/lib${LIBDIRSUFFIX} 
  --localstatedir=/var 
  --sysconfdir=/etc 
  --build=$ARCH-slackware-linux

make
make install DESTDIR=$PKG

find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF 
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a AUTHORS COPYING ChangeLog INSTALL NEWS README $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

The variables PRGNAM, VERSION and BUILD are respectively the name of program, his version and perhaps a build number, you also need to understand the basic aspects of install to build your new package, be him a tar or zip file or a have a python setup, to put your own build scheme change lines 51-60 and if you want browse the source and know how the things happen on this software just move your mind to ‘/tmp/SBo’ 😉 Hope you enjoy it and share your builds with us!

Nowadays is really important for some people hide and/or protect some personal data of other people, I’ve already explained how to encrypt a LVM volume in other articles and in my first video using xvidcap

Links:
How to encrypt disk using cryptsetup
Criptografando seu disco no Linux

But sometimes is really pain using all of these commands to open and close my sensible data, so I made a shell script called ‘mltcrypt’ years ago to solve this:

#!/bin/bash
disk=/xdir/cryptdisk-50G.bin
rdir=/demo/.yeah
losetup="sudo /sbin/losetup"
cryptsetup="sudo /sbin/cryptsetup"

if [ "$1" = "init" ]
then
    if ! mount | egrep "$rdir"; 
    then
        from="dsk$$"
        if ! $losetup -a | egrep ${disk} 2&>1 >/dev/null
        then $losetup /dev/loop0 ${disk}; fi

        $cryptsetup luksOpen /dev/loop0 ${from}
        if [ $? -ne 0 ] ; then exit; fi
        sudo mount /dev/mapper/${from} $rdir
    fi
    cd $rdir
elif [ "$1" = "end" ]
then
    if ! $losetup -a | egrep ${disk} 2&>1 >/dev/null; then exit 1; fi
    dsk=`mount | grep "$rdir" | cut -d ' ' -f1 | awk -F '/' '{print $NF}'`
    sudo umount -l $rdir

    $cryptsetup luksClose ${dsk}
    $losetup -d /dev/loop0
else
    echo lol
    exit 0
fi

So when I need to open my things I just type two commands
$ mltcrypt init
Will open all my data in /demo/.yeah

And to close this I just type
$ mltcrypt end

To use that you just need to change the variable values: disk and rdir.

Hope it help someone! 🙂

Bom, isso deveria ter sido uma apresentação em um evento, creio que agora pode ser alguma coisa mais interessante no futuro 🙂 Estes slides cobrem o conhecimento básico que deve se ter para desenvolver em C na plataforma Linux, o nível é bem basicão mas também tem alguns conceitos mais intermediários pra galera um pouco mais antiga. Vale a pena dar uma folheada 🙂

Download da apresentação em .PDF
Conceitos básicos para desenvolvimento de sistemas em ambiente Linux

Então galera, vez ou outra seja por alguma documentação ou outra coisa eu preciso manipular uma série de imagens, é complicado você abrir o GIMP uma por uma e fazer o que você quer, para evitar esse trabalho todo eu costumo usar um comando do pacote ImageMagick chamado ‘convert’. O convert é um canivete suíço na manipulação de imagens via linha de comando, aqui eu vou mostrar apenas algumas operações como: redimensionar, recortar e converter imagens.

Então vamos fazer um caso de uso básico, suponha que você tenha 50 imagens e precise editar cada uma delas, você vai fazer via console com dois ou três comandos ou editar um a um os cinquenta arquivos!? Eu tenho mais o que fazer, então vamos lá!

Imagem original pode ser vista clicando aqui.

mulatinho@forrest:~$ ls
gtkfingerprint-01.png gtkfingerprint-10.png gtkfingerprint-19.png gtkfingerprint-28.png gtkfingerprint-37.png gtkfingerprint-46.png
gtkfingerprint-02.png gtkfingerprint-11.png gtkfingerprint-20.png gtkfingerprint-29.png gtkfingerprint-38.png gtkfingerprint-47.png
gtkfingerprint-03.png gtkfingerprint-12.png gtkfingerprint-21.png gtkfingerprint-30.png gtkfingerprint-39.png gtkfingerprint-48.png
gtkfingerprint-04.png gtkfingerprint-13.png gtkfingerprint-22.png gtkfingerprint-31.png gtkfingerprint-40.png gtkfingerprint-49.png
gtkfingerprint-05.png gtkfingerprint-14.png gtkfingerprint-23.png gtkfingerprint-32.png gtkfingerprint-41.png gtkfingerprint-50.png
gtkfingerprint-07.png gtkfingerprint-16.png gtkfingerprint-25.png gtkfingerprint-34.png gtkfingerprint-43.png
gtkfingerprint-08.png gtkfingerprint-17.png gtkfingerprint-26.png gtkfingerprint-35.png gtkfingerprint-44.png
gtkfingerprint-09.png gtkfingerprint-18.png gtkfingerprint-27.png gtkfingerprint-36.png gtkfingerprint-45.png

Lição 1: Recortando imagens.

mulatinho@forrest:~$ convert gtkfingerprint-01.png -crop 800x600+150x300 gtkfingerprint-01_cut.png
(recorte básico da imagem pegando apenas o quadro que desejamos.)

mulatinho@forrest:~$ for i in `ls gtkfingerprint-*png`; do 
convert $i -crop 800x600+150x300 `echo $i | sed -e 's/.png/_cut.png/'`; done
(recortando todas as imagens na mesma posição e do mesmo tamanho com um pouquinho de shellscript)

Abaixo podemos ver o resultado da saída de todas as imagens recortadas.

mulatinho@forrest:~$ ls *cut*png
gtkfingerprint-01_cut.png gtkfingerprint-11_cut.png gtkfingerprint-21_cut.png gtkfingerprint-31_cut.png gtkfingerprint-41_cut.png
gtkfingerprint-02_cut.png gtkfingerprint-12_cut.png gtkfingerprint-22_cut.png gtkfingerprint-32_cut.png gtkfingerprint-42_cut.png
.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ....
gtkfingerprint-10_cut.png gtkfingerprint-20_cut.png gtkfingerprint-30_cut.png gtkfingerprint-40_cut.png gtkfingerprint-50_cut.png

Imagem recortada, depois de manipulada pode ser vista aqui.

Lição 2: Redimensionando imagens.

Muitas vezes também precisamos redimensionar imagens, neste caso eu precisei de imagens com 75% do tamanho (que eu criei com sufixo ‘_med.png’) para colocar dentro de umas tabelas num documento LaTeX afim de descrever o funcionamento da ferramenta e também precisei de thumbnail’s com cerca de 50% do tamanho original (que eu criei com o sufixo ‘_min.png’) das imagens para mostrar em um website. Ficou assim:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png -resize 75% gtkfingerprint-01_med.png
(redimensionando apenas uma imagem em torno de 75%)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 75% `echo $i | sed -e 's/_cut.png/_med.png/'`; done
(novamente fazendo o mesmo com todas as imagens, redimensionando-as com apenas um comando)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 50% `echo $i | sed -e 's/_cut.png/_min.png/'`; done
(e redimensionando todas as imagens com 50% do tamanho adicionando o sufixo 'min')

mulatinho@forrest:~$ for i in *pdf; do 
convert -thumbnail x200 $i[0] -flatten $i.jpg; done
(converte primeira pagina de pdfs em uma imagem)

Então galera, vez ou outra seja por alguma documentação ou outra coisa eu preciso manipular uma série de imagens, é complicado você abrir o GIMP uma por uma e fazer o que você quer, para evitar esse trabalho todo eu costumo usar um comando do pacote ImageMagick chamado ‘convert’. O convert é um canivete suíço na manipulação de imagens via linha de comando, aqui eu vou mostrar apenas algumas operações como: redimensionar, recortar e converter imagens.

Então vamos fazer um caso de uso básico, suponha que você tenha 50 imagens e precise editar cada uma delas, você vai fazer via console com dois ou três comandos ou editar um a um os cinquenta arquivos!? Eu tenho mais o que fazer, então vamos lá!

Imagem original pode ser vista clicando aqui.

mulatinho@forrest:~$ ls
gtkfingerprint-01.png gtkfingerprint-10.png gtkfingerprint-19.png gtkfingerprint-28.png gtkfingerprint-37.png gtkfingerprint-46.png
gtkfingerprint-02.png gtkfingerprint-11.png gtkfingerprint-20.png gtkfingerprint-29.png gtkfingerprint-38.png gtkfingerprint-47.png
gtkfingerprint-03.png gtkfingerprint-12.png gtkfingerprint-21.png gtkfingerprint-30.png gtkfingerprint-39.png gtkfingerprint-48.png
gtkfingerprint-04.png gtkfingerprint-13.png gtkfingerprint-22.png gtkfingerprint-31.png gtkfingerprint-40.png gtkfingerprint-49.png
gtkfingerprint-05.png gtkfingerprint-14.png gtkfingerprint-23.png gtkfingerprint-32.png gtkfingerprint-41.png gtkfingerprint-50.png
gtkfingerprint-07.png gtkfingerprint-16.png gtkfingerprint-25.png gtkfingerprint-34.png gtkfingerprint-43.png
gtkfingerprint-08.png gtkfingerprint-17.png gtkfingerprint-26.png gtkfingerprint-35.png gtkfingerprint-44.png
gtkfingerprint-09.png gtkfingerprint-18.png gtkfingerprint-27.png gtkfingerprint-36.png gtkfingerprint-45.png

Lição 1: Recortando imagens.

mulatinho@forrest:~$ convert gtkfingerprint-01.png -crop 800x600+150x300 gtkfingerprint-01_cut.png
(recorte básico da imagem pegando apenas o quadro que desejamos.)

mulatinho@forrest:~$ for i in `ls gtkfingerprint-*png`; do 
convert $i -crop 800x600+150x300 `echo $i | sed -e 's/.png/_cut.png/'`; done
(recortando todas as imagens na mesma posição e do mesmo tamanho com um pouquinho de shellscript)

Abaixo podemos ver o resultado da saída de todas as imagens recortadas.

mulatinho@forrest:~$ ls *cut*png
gtkfingerprint-01_cut.png gtkfingerprint-11_cut.png gtkfingerprint-21_cut.png gtkfingerprint-31_cut.png gtkfingerprint-41_cut.png
gtkfingerprint-02_cut.png gtkfingerprint-12_cut.png gtkfingerprint-22_cut.png gtkfingerprint-32_cut.png gtkfingerprint-42_cut.png
.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ....
gtkfingerprint-10_cut.png gtkfingerprint-20_cut.png gtkfingerprint-30_cut.png gtkfingerprint-40_cut.png gtkfingerprint-50_cut.png

Imagem recortada, depois de manipulada pode ser vista aqui.

Lição 2: Redimensionando imagens.

Muitas vezes também precisamos redimensionar imagens, neste caso eu precisei de imagens com 75% do tamanho (que eu criei com sufixo ‘_med.png’) para colocar dentro de umas tabelas num documento LaTeX afim de descrever o funcionamento da ferramenta e também precisei de thumbnail’s com cerca de 50% do tamanho original (que eu criei com o sufixo ‘_min.png’) das imagens para mostrar em um website. Ficou assim:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png -resize 75% gtkfingerprint-01_med.png
(redimensionando apenas uma imagem em torno de 75%)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 75% `echo $i | sed -e 's/_cut.png/_med.png/'`; done
(novamente fazendo o mesmo com todas as imagens, redimensionando-as com apenas um comando)

mulatinho@forrest:~$ for i in `ls *cut.png`; do 
convert $i -resize 50% `echo $i | sed -e 's/_cut.png/_min.png/'`; done
(e redimensionando todas as imagens com 50% do tamanho adicionando o sufixo 'min')

https://mulatinho.files.wordpress.com/2015/04/softlivrev2-140610222148-phpapp02.pdf

Você pode ver o resultado da imagem com 75% do seu tamanho original clicando aqui.
Você pode ver o resultado da imagem com 50% do seu tamanho original clicando aqui.

As vezes temos situações em que uma imagem está numa qualidade muito grande, isso acontece com as fotos dos celulares mais modernos hoje em dia, e aí fica difícil da gente enviar pros nosso amigos e familiares um álbum cheio de imagens imensas por e-mail ou numa rede social, para facilitar isso a gente geralmente reduz a qualidade da imagem ou até mesmo a redimensiona como vimos acima.

Lição 3: Convertendo imagens.

Existem vezes em que simplesmente desejamos converter um formato de imagem, isso também é muito fácil de fazer com o convert que suporta vários formatos como: JPEG, GIF, PNG, BMP, etc. Vejamos alguns exemplos de conversão de imagens:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.bmp
(converte a imagem para o formato BMP, pior compressão, windows suqz)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.gif
(converte a imagem para o formato GIF, ótima compressão)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.jpg
(converte a imagem para o formato JPG, compressão legal)
mulatinho@forrest:~$ ls -l gtkfingerprint-01_cut.*
-rw-r--r-- 1 mulatinho mulatinho 673338 Feb  7 21:49 gtkfingerprint-01_cut.bmp
-rw-r--r-- 1 mulatinho mulatinho  25005 Feb  7 21:46 gtkfingerprint-01_cut.gif
-rw-r--r-- 1 mulatinho mulatinho  42447 Feb  7 21:50 gtkfingerprint-01_cut.jpg
-rw-r--r-- 1 mulatinho mulatinho  30433 Feb  7 21:19 gtkfingerprint-01_cut.png
mulatinho@forrest:~$ file -bi gtkfingerprint-01_cut.*
application/octet-stream; charset=binary
image/gif; charset=binary
image/jpeg; charset=binary
image/png; charset=binary

Links com alguns extras.

http://www.imagemagick.org/Usage/photos/
http://www.imagemagick.org/script/convert.php#usage

Bom, essa é a dica do mulato da semana rapaziada! Espero que aproveitem! 😉

Você pode ver o resultado da imagem com 75% do seu tamanho original clicando aqui.
Você pode ver o resultado da imagem com 50% do seu tamanho original clicando aqui.

As vezes temos situações em que uma imagem está numa qualidade muito grande, isso acontece com as fotos dos celulares mais modernos hoje em dia, e aí fica difícil da gente enviar pros nosso amigos e familiares um álbum cheio de imagens imensas por e-mail ou numa rede social, para facilitar isso a gente geralmente reduz a qualidade da imagem ou até mesmo a redimensiona como vimos acima.

Lição 3: Convertendo imagens.

Existem vezes em que simplesmente desejamos converter um formato de imagem, isso também é muito fácil de fazer com o convert que suporta vários formatos como: JPEG, GIF, PNG, BMP, etc. Vejamos alguns exemplos de conversão de imagens:

mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.bmp
(converte a imagem para o formato BMP, pior compressão, windows suqz)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.gif
(converte a imagem para o formato GIF, ótima compressão)
mulatinho@forrest:~$ convert gtkfingerprint-01_cut.png gtkfingerprint-01_cut.jpg
(converte a imagem para o formato JPG, compressão legal)
mulatinho@forrest:~$ ls -l gtkfingerprint-01_cut.*
-rw-r--r-- 1 mulatinho mulatinho 673338 Feb  7 21:49 gtkfingerprint-01_cut.bmp
-rw-r--r-- 1 mulatinho mulatinho  25005 Feb  7 21:46 gtkfingerprint-01_cut.gif
-rw-r--r-- 1 mulatinho mulatinho  42447 Feb  7 21:50 gtkfingerprint-01_cut.jpg
-rw-r--r-- 1 mulatinho mulatinho  30433 Feb  7 21:19 gtkfingerprint-01_cut.png
mulatinho@forrest:~$ file -bi gtkfingerprint-01_cut.*
application/octet-stream; charset=binary
image/gif; charset=binary
image/jpeg; charset=binary
image/png; charset=binary

Links com alguns extras.

http://www.imagemagick.org/Usage/photos/
http://www.imagemagick.org/script/convert.php#usage

Bom, essa é a dica do mulato da semana rapaziada! Espero que aproveitem! 😉

Se você gosta de utilizar o terminal de comandos do linux sabe que é necessário gastar alguns minutos o personalizando, também é muito útil usar o recurso de abas screen00para poder fazer várias atividades ao mesmo tempo, o que muitas pessoas não sabem é que existe o recurso do comando ‘screen’ criado pelo projeto GNU que fornece o recurso de múltiplas janelas sem a necessidade da intervenção de um terminal com suporte a abas.

– O que é o screen?

O screen é um multiplexador de terminais que permite ao usuário em uma mesma sessão abrir várias janelas e realizar atividades paralelas, este recurso é um pouco subestimado pois a maioria das atividades de usuários comuns são feitas na sua máquina local e então basta utilizar um terminal com suporte a abas para se obtêr o mesmo efeito: vários terminais com diferentes sessões e atalhos que permitem a movimentação entre si afim de se realizar várias atividades;

A diferença do GNU screen é que as janelas que ele cria são dentro de uma mesma sessão e isso é muito útil por exemplo numa sessão remota via SSH, em vez de o usuário acessar várias vezes o servidor para realizar atividades paralelas como faria normalmente, o GNU screen permite um único acesso e várias janelas diferentes onde é possível realizar várias atividades em conjunto na mesma sessão.

– Parece bom! Como uso o GNU Screen?

É fácil, basta digitar ‘screen’ e ele já começa a rodar, abaixo veremos alguns argumentos interessantes que tornam ainda mais eficiente essa solução.

screen01$ screen
(inicia a sessão multiplexada, praticamente você recebe um novo prompt)

$ screen -ls
There is a screen on:
31248.pts-2.sf064515 (Attached)
1 Socket in /var/run/screen/S-mulatinho.
(pode ser visto acima o nome da sessão ‘31248.pts-2.sf064515’ screen rodando)

$ screen -r NomeDaSessao
(puxa uma sessão que está solta para a tela atual)

– Ótimo! Funcionou, mas onde está a multiplexação?

Apartir do momento em que você está dentro do multiplexador screen as coisas mudam um pouco de figura e todo o gerenciamento de janelas e comandos é feito utilizando a sequência de caracteres “CTRL + A + <OPÇÃO>”, abaixo nós veremos algumas opções e sua descrições mas elas só se tornarão de fato entendíveis para o usuário final com a prática, vejamos:

screen02

c [create] cria uma nova janela
n [next] modifica a janela para a próxima da lista
X [delete] deleta uma janela
A [rename] renomeia uma janela
S [split] divide janelas na mesma tela (várias janelas na tela atual)
TAB [split next] alterna entre as janelas dividas
[ [scrollback] permite subir a tela para vêr mais acima e copiar dados
ESC [cancel] cancela alguma opção
: [two points] permite digitar comandos (man screen)
:resize [resize] permite redefinir o tamanho da janela

 

figura 4 Então ao rodar o comando ‘screen’ você receberá um novo prompt de comando e só então poderá digitar no seu teclado a sequência ‘CTRL + A + c’ e vêr que uma nova janela foi criada e depois ‘CTRL + A + n’ para navegar entre as janelas e poder realizar várias atividades. Você verá que utilizando as opções acima e com um pouco de prática o uso do GNU Screen te tornará muito mais eficiente no terminal. Tente um pouco e veja você também!!

Descrição das figuras:
Figura 1: Mostra o screen rodando e o usuário listando as sessões ativas; Figura 2: Mostra duas sessões rodando embaixo do screen e as janelas divididas; Figura 3: Mostra a sessão rodando com o comando ‘top’ mostrando e outra disponível; Figura 4: Mostra o seletor de janelas na primeira, e o comando de print da tela na segunda;

Fiquem ligados que em breve sairá um artigo sobre como se tornar mais eficiente editando arquivos e escrevendo códigos utilizando o GNU Screen e o VIM. 🙂

%d blogueiros gostam disto: