Este artigo contém instruções sobre como criar um Slackware64 verdadeiramente multilib. Um sistema Linux 64 bits multilib é capaz de rodar programas de 64 bits e 32 bits. O Filesystem Hierarchy Standard descreve o método ideal para obter uma separação clara entre os softwares de 64 bits e 32 bits em um único sistema. Ao iniciar o desenvolvimento do “Slackware64” (o porte oficial para a arquitetura x86_64) optamos por adotar este padrão. Portanto, o Slackware64 foi configurado para procurar bibliotecas de 64 bits nos diretórios /lib64
e /usr/lib64
. É por isso que chamo o Slackware64 de “multilib-ready” (multilib-preparado)- embora as bibliotecas de 32 bits sejam procuradas em /lib
e /usr/lib
, o Slackware64 não vem com nenhum software de 32 bits. Há mais um passo que deve ser executado (por você, o usuário) antes que o Slackware64 possa ser chamado de “multilib-enabled” (multilib-habilitado).
Isso é feito da seguinte maneira:
O Slackware64 tem uma vantagem sobre outros “forks” de 64 bits que existem. Esses forks criam a camada de compatibilidade com sistema de 32 bits recompilando grande parte de seus pacotes para 32 bits. Por outro lado, o Slackware é uma distribuição que possui uma versão para 32 bits e 64 bits, em que cada versão é desenvolvida de forma paralela. Isto quer dizer que você não precisa compilar todos os pacotes de 32 bits a partir do zero para que seja possível adicionar a camada de compatibilidade ao sistema 64 bits. Você simplesmente pega os pacotes da árvore de pacotes do Slackware 32 bits! \\Essa é uma das razões para não adicionar todos os pacotes multilib ao Slackware64 - nós criamos as condições adequadas, mas é necessário que o usuário atue caso necessite da compatibilidade.
Em uma seção posterior, eu vou explicar como você pode buscar um pacote do Slackware 32 bits (digamos, o pacote “mesa”) e reempacotá-lo em um pacote “mesa-compat32” que pode ser instalado diretamente no Slackware64.
Vou dar alguns exemplos de programas que necessitam do multilib em um Slackware de 64 bits, porque eles não serão inciados ou compilado no Slackware64 sem uma camada de compatibilidade 32 bits:
Felizmente, o suporte a 64 bits está se tornando cada vez mais comum. A Adobe foi um ponto sensível por muito tempo, mas eles finalmente lançaram seu plugin do navegador Flash em uma versão de 64 bits. A Sun (agora absorvida pela Oracle) revelou uma versão de 64 bits de seu plugin de navegador Java. Esses dois eventos foram os principais gatilhos para começar a trabalhar no Slackware64.
Você pode baixar um conjunto de pacotes e scripts para multilib-enabled no meu site: “http://slackware.com/~alien/multilib”.
Além de vários arquivos README (este artigo Wiki basicamente é uma versão aprimorada de um desses READMEs), você encontrará um subdiretório para cada versão do Slackware de 64 bits abaixo do diretório superior “multilib”. Existe outro diretório chamado “source”. O diretório “source” contém as fontes de pacotes e scripts SlackBuild.
O que você realmente está interessado - os pacotes binários - está disponível no diretório com o número da versão do Slackware, abaixo do diretório de nível superior. Cada diretório também contém um subdiretório “slackware64-compat32” onde você encontrará um conjunto essencial de pacotes Slackware de 32 bits convertidos, prontos para instalação em seu Slackware de 64 bits.
Para se manter atualizado, aconselho você a ficar de olho no ChangeLog (RSS feed) que mantenho para meus pacotes multilib. Normalmente, terei os pacotes glibc e gcc atualizados disponíveis um dia após o Slackware ter atualizações para gcc e glibc.
Automatização:
# slackpkg update # slackpkg upgrade multilib # slackpkg install multilib
Esse último comando mostrará se algum pacote novo foi adicionado à coleção de pacotes “compat32”, como llvm-compat32 e orc-compat32 recentemente.
SLACKPKGPLUS=on VERBOSE=1 ALLOW32BIT=off USEBL=1 WGETOPTS="--timeout=5 --tries=1" GREYLIST=on PKGS_PRIORITY=( multilib restricted alienbob ktown ) REPOPLUS=( slackpkgplus multilib restricted alienbob ktown ) MIRRORPLUS['multilib']=http://bear.alienbase.nl/mirrors/people/alien/multilib/current/ MIRRORPLUS['alienbob']=http://bear.alienbase.nl/mirrors/people/alien/sbrepos/current/x86_64/ MIRRORPLUS['restricted']=http://bear.alienbase.nl/mirrors/people/alien/restricted_sbrepos/current/x86_64/ MIRRORPLUS['ktown']=http://bear.alienbase.nl/mirrors/alien-kde/current/latest/x86_64/ MIRRORPLUS['slackpkgplus']=http://slakfinder.org/slackpkg+/
Esta seção contém as instruções essenciais para adicionar capacidade multilib completa ao seu sistema Slackware64. Se você deseja entender o processo em mais detalhes, ou precisa de informações sobre como compilar software de 32 bits no Slackware64, você também deve ler as seções a seguir.
Observe que o “#
” na frente dos comandos representa um prompt de root.
# SLACKVER=14.2 # mkdir multilib # cd multilib # lftp -c "open http://bear.alienbase.nl/mirrors/people/alien/multilib/ ; mirror -c -e ${SLACKVER}" # cd ${SLACKVER}
# upgradepkg --reinstall --install-new *.t?z
depois de mudar para o diretório onde você baixou esses pacotes.
Este comando também instalará um pacote adicional chamado “compat32-tools”.
lftp
” terá feito isso), então você está com sorte, porque eu já fiz a conversão do pacote de 32 bits para você! Tudo o que você faz é executar o comando: # upgradepkg --install-new slackware64-compat32/*-compat32/*.t?z
que irá instalar todos os pacotes Slackware de 32 bits convertidos (ou atualizá-los se você já instalou pacotes multilib mais antigos, por exemplo, quando você estiver atualizando para um Slackware mais novo). Isso é tudo!
/home/ftp/pub/slackware/slackware-14.2/slackware/
”. /media/SlackDVD/slackware/
”, mas não vou usar isso nos comandos de exemplo abaixo).# mkdir slackware64-compat32 ; cd slackware64-compat32
# massconvert32.sh -i /home/ftp/pub/slackware/slackware-14.2/slackware/
# upgradepkg --install-new *-compat32/*.t?z
glibc
e gcc
à blacklist de pacotes. Se você não tomar este cuidado, você corre o risco de seu gerenciador de pacotes substituir acidentalmente suas versões multilib pelas versões originais de 64 bits do Slackware! /etc/slackpkg/blacklist
será suficiente para colocar todos os meus pacotes na blacklist (incluindo pacotes multilib gcc e glibc e todos os pacotes compat32
):
[0-9]+alien [0-9]+compat32
Por outro lado, se você está usando a extensão slackpkg chamada slackpkg+ então você definitivamente não deve colocar esses pacotes na lista negra, porque isso impede o slackpkg+ de gerenciá-los!
# massconvert32.sh -u http://algumservidor.org/path/para/slackware-14.2/slackware
Os seguintes pacotes glibc/gcc são substituições para - não adições aos - pacotes padrão do Slackware. Use o programa “upgradepkg
” para atualizar para minhas versões multilib do gcc e glibc. Você precisará deles para executar (glibc) e construir (gcc) software de 32 bits em seu computador Slackware de 64 bits:
gcc-java
porque seu desenvolvimento foi interrompido.
glibc-zoneinfo
não faz parte do multilib, pois não contém código. Você precisa instalar o pacote glibc-zoneinfo
do Slackware.
Existe um pacote adicional que você precisa instalar usando o programa “installpkg”. A versão pode variar para cada lançamento do Slackware, mas o pacote pode ser encontrado no mesmo diretório onde você também encontra as versões multilib de gcc
e glibc
:
A atualização de glibc e gcc que descrevi na seção anterior muda seu sistema de “ multilib-ready ” para “ multilib-enabled ”.
Agora, tudo que você precisa fazer é instalar as versões 32 bits dos softwares do Slackware para que os futuros programas de 32 bits que você vai instalar e/ou compilar encontrem todas as bibliotecas de 32 bits de que precisam para funcionar.
Isso não é tão simples quanto pegar pacotes de 32 bits do Slackware e instalá-los no Slackware64:
* Em primeiro lugar, você acabará com vários pacotes com o mesmo nome (dois pacotes 'mesa', dois pacotes 'zlib', etc …) o que será confuso para você e também para o slackpkg gerenciador de pacotes.
* Além disso, se o pacote de 32 bits contiver binários (algo como /usr/bin/foo
), eles sobrescreverão suas contrapartes de 64 bits quando você instalar o pacote de 32 bits. Vai bagunçar seriamente o seu sistema se isso acontecer.
Um pouco de cuidado extra é necessário para que arquivos desnecessários/indesejados sejam retirados dos pacotes de 32 bits antes de você instalá-los. O que você precisa é de um pacote de 32 bits que não entre em conflito com o que já está presente no Slackware de 64 bits. Daí o nome “pacote de compatibilidade de 32 bits”.
Decidi que seria um desperdício de banda de download se eu mesmo criasse versões de compatibilidade de 32 bits dos pacotes do Slackware. Afinal, você provavelmente comprou o DVD do Slackware 14.2, então já possui as versões de 64 e 32 bits do Slackware … ou então a árvore do Slackware de 32 bits está disponível para download gratuito, é claro
Em vez disso, escrevi alguns scripts (partes do código do script foram escritas por Fred Emmott da para o Slamd64) e os envolvi em um pacote “compat32-tools”. Seu objetivo é permitir que você extraia o conteúdo de qualquer pacote do Slackware de 32 bits e use-o para criar um novo pacote que possa ser instalado com segurança em seu Slackware de 64 bits.
Este pacote “compat32-tools” precisa de alguma explicação.
Por favor, leia o arquivo 'README' detalhado no diretório /usr/doc/compat32-tools - * /
, ele irá ajudá-lo. Estes são os três scripts úteis que o pacote instala:
x/mesa-7.5-i486-1.txz
) e executa # convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz
que criará um novo pacote chamado mesa-compat32-7.5-x86_64-1compat32.txz
. Este novo pacote (que é criado em seu diretório /tmp
a menos que você especifique outro destino) é basicamente o antigo pacote de 32 bits, mas retirado de coisas não essenciais. O nome de base alterado (mesa torna-se mesa-compat32) permite que você instale este novo pacote no Slackware64 onde ele coexistirá com o pacote de 64 bits mesa, sem sobrescrever nenhum arquivo.
O script deixa arquivos temporários no diretório “/tmp/package-<prgnam>-compat32
” que você pode deletar com segurança.
/mnt/dvd
): # massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32
Esta ação resultará em cerca de 150 MB de novos pacotes que você encontrará dentro do diretório recém-criado ~/compat32
(o nome do diretório é arbitrário, é claro, eu o escolhi por causa deste exemplo). Esses pacotes incluem o componente de 32 bits do seu sistema multilib Slackware64.
Eles devem ser instalados usando “installpkg
” e fornecem uma camada de compatibilidade de 32 bits bastante completa sobre o Slackware64:
# installpkg~/compat32/*/*.t?z
Se você estiver atualizando de uma versão anterior desses pacotes (porque, por exemplo, você atualizou seu Slackware de 64 bits para uma versão mais recente) então você não usa “installpkg
” é claro, mas “upgradepkg –install-new
”:
# upgradepkg --install-new ~/compat32/*/*.t?z
O parâmetro “–install-new” é necessário para instalar os novos pacotes compat32
que foram adicionados entre as versões.
compat32
você notará que alguns irão mostrar erros sobre arquivos ausentes em /etc
. Isso ocorre “por definição” e esses erros podem ser ignorados. Essas mensagens são causadas pelo fato de que os arquivos em /etc
são removidos de um pacote “-compat32” durante a conversão (exceto para pango e gtk+2). Presumo que os arquivos em /etc
já terão sido instalados pelos pacotes originais de 64 bits.cups-compat32
: Executing install script for cups-compat32-1.3.11-x86_64-1.txz. install/doinst.sh: line 5: [: too many arguments cat: etc/cups/interfaces: Is a directory cat: etc/cups/ppd: Is a directory cat: etc/cups/ssl: Is a directory cat: etc/cups/*.new: No such file or directory cat: etc/dbus-1/system.d/cups.conf.new: No such file or directory chmod: cannot access `etc/rc.d/rc.cups.new': No such file or directory cat: etc/rc.d/rc.cups.new: No such file or directory Package cups-compat32-1.3.11-x86_64-1.txz installed.
convertpkg-compat32
para converter um pacote não-Slackware em um pacote -compat32, eu devo aconselhar fortemente a não fazê-lo. O script foi escrito com um único propósito: disponibilizar versões de 32 bits dos binários/bibliotecas oficiais do Slackware64 em uma configuração multilib. Como tal, o script removerá muitas coisas que estão presentes no pacote original de 32 bits - coisas que se espera tenham sido instaladas como parte da versão de 64 bits do pacote. Executar um programa pré-compilado de 32 bits é fácil depois de você ter feito a preparação do sistema descrita acima. Basta fazer o download, instalar e executar!
Às vezes, você pode se deparar com um programa que requer uma determinada biblioteca do Slackware de 32 bits que você ainda não tem disponível. Nesse caso, descubra qual pacote do Slackware de 32 bits contém essa biblioteca faltante. Use o script “convertpkg-compat32” para converter aquele pacote Slackware original de 32 bits e instale o pacote “compatível” de 32 bits resultante no Slackware64.
No caso de você precisar compilar um programa de 32 bits (wine e grub são dois exemplos de programas de código aberto que são apenas de 32 bits), primeiro configure o ambiente de shell do root executando o comando:
# . /etc/profile.d/32dev.sh
Observe o 'ponto' no início da linha - na verdade, é parte da linha de comando! O uso do ponto é equivalente ao comando 'source'.
A execução deste comando altera ou cria várias variáveis de ambiente. O efeito disso é que as versões de 32 bits dos binários são preferíveis aos binários de 64 bits quando você compila o código-fonte - você estará executando uma compilação de 32 bits. O efeito durará até que você saia do shell do root.
Neste ambiente alterado, você poderá usar o SlackBuilds padrão para construir pacotes de 32 bits para o Slackware64. Há algumas coisas a se ter em mente:
# convertpkg-compat32 -i /path/to/your/fresh/foo-VERSION-i486-BUILD.tgz # upgradepkg --install-new /tmp/foo-compat32-VERSION-x86_64-BUILDcompat32.txz
-compat32
”, você pode ter que reinstalar seus binários Nvidia ou Ati de drivers de vídeo para X.Org. Esses pacotes de driver contêm bibliotecas de 64 bits e 32 bits para serem o mais úteis possível em um sistema operacional multilib de 64 bits. Se você instalou os arquivos de driver para ambas as arquiteturas, o pacote “mesa-compat32
” irá sobrescrever alguns dos arquivos de biblioteca de 32 bits.
Esta é a lista de pacotes que são convertidos em versões “-compat32” pelo script massconvert32.sh
. Observe que alguns desses pacotes não fazem parte do Slackware 13.0 ou 13.1, eles foram adicionados em uma versão posterior do Slackware, portanto, produzirão uma mensagem “FALHA: pacote 'nome_do_pacote' não foi encontrado!” quando você execute o script em uma versão mais antiga. O contrário também é verdadeiro - alguns pacotes foram removidos em versões posteriores do Slackware e também irão disparar a mensagem “FALHA: pacote 'nome_do_pacote' não foi encontrado!”. Não se preocupe com isso.
# Série A/: aaa_elflibs attr bzip2 cups cxxlibs dbus e2fsprogs eudev libgudev openssl-solibs udev util-linux xz # Série AP/: cups cups-filters flac mariadb mpg123 mysql sqlite # Série D/: libtool llvm opencl-headers # Série L/: SDL2 alsa-lib alsa-oss alsa-plugins atk audiofile cairo dbus-glib elfutils esound expat ffmpeg fftw freetype fribidi gamin gc gdk-pixbuf2 giflib glib2 gmp gnome-keyring gtk+2 gst-plugins-base gst-plugins-base0 gst-plugins-good gst-plugins-good0 gst-plugins-libav gstreamer gstreamer0 hal harfbuzz icu4c jasper json-c lame lcms lcms2 libaio libart_lgpl libasyncns libclc libedit libelf libexif libffi libglade libgphoto2 libidn libieee1284 libjpeg libjpeg-turbo libmng libmpc libnl3 libnotify libogg libpcap libpng libsamplerate libsndfile libtasn1 libtermcap libtiff libunistring libusb libvorbis libxml2 libxslt lzo ncurses ocl-icd openjpeg orc pango popt pulseaudio python-six qt readline sbc sdl seamonkey-solibs speexdsp startup-notification svgalib v4l-utils zlib # Série N/: curl cyrus-sasl gnutls libgcrypt libgpg-error libtirpc nettle openldap-client openssl p11-kit samba # Série X/: fontconfig freeglut glew glu libFS libICE libSM libX11 libXScrnSaver libXTrap libXau libXaw libXcomposite libXcursor libXdamage libXdmcp libXevie libXext libXfixes libXfont libXfont2 libXfontcache libXft libXi libXinerama libXmu libXp libXpm libXprintUtil libXrandr libXrender libXres libXt libXtst libXv libXvMC libXxf86dga libXxf86misc libXxf86vm libdmx libdrm libepoxy libfontenc libinput libpciaccess libva libva-intel-driver libvdpau libxcb libxshmfence mesa pixman vulkan-sdk xcb-util # Série XAP/: sane
Você pode baixar os pacotes multilib de (pelo menos) estes locais:
Divirta-se!
Eric