Scroll to navigation

MULTISTRAP(1) User Contributed Perl Documentation MULTISTRAP(1)

Nome

multistrap - bootstraps de múltiplos repositórios

Sinopse

 multistrap [-a ARQUITECTURA] [-d DIRECTÓRIO] -f FICHEIRO_CONFIGURAÇÃO
 multistrap [--simulate] -f FICHEIRO_CONFIGURAÇÃO
 multistrap -?|-h|--help|--version

Opções

-?|-h|--help|--version - mostra o texto de ajuda e termina com sucesso.

--dry-run - recolhe todas as definições de configuração e gera um sumário a descoberto.

--simulate - o mesmo que --dry-run

(As seguintes opções também podem ser definidas no ficheiro de configuração.)

-a|--arch - arquitectura dos pacotes a colocar na multistrap.

-d|--dir - directório onde o bootstrap irá ser instalado.

-f|--file - ficheiro de configuração para multistrap [necessário]

-s|--shortcut - versão curta de -f para ficheiros em localizações conhecidas.

--tidy-up - remove dados da cache do apt, ficheiros de pacotes descarregados e a cache de pacotes do apt. O mesmo que cleanup=true.

--no-auth - permite o uso de repositórios não autenticados. O mesmo que noauth=true

--source-dir DIRECTÓRIO - move o conteúdo de var/cache/apt/archives/ de dentro da chroot para o directório externo especificado, depois adiciona os pacotes fonte Debian para cada binário usado. O mesmo que retainsources=DIRECTÓRIO, se o directório especificado não existir, não faz nada. Requer --tidy-up de modo a calcular a lista completa dos pacotes fonte, incluindo as dependências.

Descrição

multistrap disponibiliza um método tipo debootstrap baseado em apt e estendido para disponibilizar suporte para múltiplos repositórios, usando um ficheiro de configuração para especificar os conjuntos relevantes, arquitectura, pacotes extra e o mirror a usar para cada bootstrap.

O objectivo é criar um sistema de ficheiros bootstrap / raiz completo com todos os pacotes instalados e configurados, em vez de apenas o sistema base.

Na maioria dos casos, os utilizadores precisam de criar um ficheiro de configuração para para cada utilização diferente do multistrap.

Exemplo de configuração:

 [General]
 arch=armel
 directory=/opt/multistrap/
 # igual à opção --tidy-up se definida para true
 cleanup=true
 # igual à opção --no-auth se definida para true
 # pacotes chaveiro listados em cada bootstrap serão
 # na mesma instalados.
 noauth=false
 # extrai todos os arquivos descarregados (predefinição é true)
 unpack=true
 # se deve adicionar a /suite para especificar onde o apt
 # deve procura pacotes. A predefinição é false.
 explicitsuite=false
 # permite MultiArch para as arquitecturas especificadas
 # a predefinição é vazio
 # aptsources é uma lista de secções a usar
 # no /etc/apt/sources.list.d/multistrap.sources.list
 # do destino. A ordem não é importante
 aptsources=Debian
 # a opção bootstrap determina qual o repositório
 # é usado para calcular a lista de Prioridade: pacotes necessários.
 # e quais os pacotes vão para rootfs.
 # A ordem das secções não é importante.
 bootstrap=Debian
 
 [Debian]
 packages=
 source=http://ftp.uk.debian.org/debian
 keyring=debian-archive-keyring
 suite=jessie

This will result in a completely normal bootstrap of Debian Jessie from the specified mirror, for armel in '/opt/multistrap/'. (This configuration is retained in the package as /usr/share/multistrap/jessie.conf)

Especifica um pacote para estender o multistrap para incluir esse pacote e todas as dependências desse pacote.

Especifica mais repositórios para o bootstrap ao adicionar novas secções. Os nomes das secções precisam de estar listados na opção geral do bootstrap para que os pacotes sejam incluídos no bootstrap.

Especifica quais os repositórios que estarão disponíveis ao sistema final no arranque ao listar os nomes de secção na opção geral do aptsources, ex. para excluir algumas fontes internas ou quando se usa um mirror local quando se constrói o rootfs.

Os nomes das secções são insensíveis a maiúsculas/minúsculas.

Todas as dependências são resolvidas apenas pelo apt, usando todos os repositórios bootstrap, para usar apenas as dependências mais recentes e apropriadas. Note que o multistrap desliga a Install-Recommends portanto se o multistrap precisar de um pacote que é apenas uma dependência recomendada, o pacote recomendado precisa de ser especificado explicitamente na linha de pacotes. Veja "Explicit suite specification" para mais informação sobre obter pacotes específicos de suites específicas.

'Architecture' e 'directory' podem ser sobrepostas na linha de comandos. Algumas das outras opções gerais também têm opções de linha de comandos.

Exemplos e documentação online

"multistrap" suporta uma gama de permutações, veja a wiki e o site web emdebian para mais informação e exemplos de configuração:

http://wiki.debian.org/Multistrap

http://www.emdebian.org/multistrap/

"multistrap" inclui um exemplo de ficheiro de configuração com uma lista completa de todas as opções do ficheiro de configuração suportadas. /usr/share/doc/multistrap/examples/full.conf

Atalhos

Num modo semelhante ao "debootstrap", o "multistrap" suporta referir-se a ficheiros de configuração em localizações conhecidas através de atalhos. Quando se usa a opção "--shortcut". o "multistrap" irá procurar ficheiros em /usr/share/multistrap e depois em /etc/multistrap.d/, adicionando um sufixo '.conf' ao atalho especificado.

Estes dois comandos são equivalentes:

 $ sudo multistrap -s sid
 $ sudo multistrap -f /usr/share/multistrap/sid.conf

Note que o "multistrap" ainda irá falhar se o próprio ficheiro de configuração não definir o directório da arquitectura.

Repositórios

"aptsources" lista as secções que devem ser usadas para criar as /etc/apt/sources.list.d/multistrap.list sources do apt no sistema final. Nem todas as "aptsources" têm de aparecer na secção "bootstrap" se você tiver algumas sources internas ou locais que não estão acessíveis ao sistema de ficheiros raiz instalado.

"bootstrap" lista as secções que serão usadas para criar o próprio multistrap. Apenas os pacotes listados em "bootstrap" serão descarregados e desempacotados pelo multistrap.

Certifica que "bootstrap" lista todas as secções que precisa para o apt ser capaz de encontrar todos os pacotes a serem desempacotados para o multistrap.

(Versões antigas do multistrap suportaram a mesma opção sob o nome "debootstrap" - esta ortografia ainda é suportada mas os novos ficheiros de configuração deverão ser antes "bootstrap".

Definições gerais:

'arch' pode ser sobreposto na linha de comandos usando a opção "--arch".

'directory' especifica o directório de nível de topo onde o bootstrap irá ser criado - não é empacotado em um .tgz depois de completo.

'bootstrap' lista as Secções que serão usadas para especificar os pacotes que serão descarregados (e opcionalmente desempacotados) para o bootstrap.

'aptsources' lista as Secções que serão usadas para especificar as fontes do apt no sistema final, ex. se você precisar de usar um repositório local para gerar a rootfs que não estará disponível ao dispositivo em tempo de execução, lista essa secção em "bootstrap" mas não em "aptsources".

Se deseja que um pacote fique na rootfs, ele tem de estar especificado na lista "bootstrap" sob General.

A ordem dos nomes das secções em cada lista, não é importante.

Se "markauto" estiver definido para verdadeiro, o "multistrap" irá pedir ao apt para marcar todos os pacotes especificados na lista "packages" combinada como instalados manualmente e todas as dependências não listadas explicitamente como instaladas automaticamente na base de dados de estado extenso do APT. "markauto" pode ser usado independentemente de "unpack".

Tal como no debootstrap, o multistrap irá continuar após ocorrerem erros, desde que o ficheiro de configuração possa ser analisado correctamente.

O multistrap também implementa o suporte a machine:variant usado originalmente em Emdebian Crush, apesar de ser uma implementação diferente. Usando o suporte de configuração em cascata, podem ser suportadas combinações particulares de machine:variant através de alterações simples na linha de comandos.

Definir "tarballname" para verdadeiro também empacota o sistema de ficheiros final num tarball.

Note que o multistrap ignora quaisquer opções não reconhecidas no ficheiro de configuração - isto permite comportamento de compatibilidade com versões anteriores assim como o sobrecarregamento dos ficheiros de configuração do multistrap para suportar outras ferramentas (como o pbuilder). Use a opção "--simulate" para ver as definições de configuração combinadas.

No entanto, se o próprio ficheiro de configuração não puder ser analisado, o multistrap irá abortar. Verifique que o ficheiro de configuração tem uma chave e um valor para cada linha que não seja um comentário. Os valores têm de estar todos na mesma linha que a respectiva chave.

Definições da Secção

 [Debian]
 packages=
 source=http://ftp.uk.debian.org/debian
 keyring=debian-archive-keyring
 suite=jessie

O nome de secção (em [] chavetas) precisa de ser único para este ficheiro de configuração e quaisquer ficheiros de configuração que este ficheiro inclua. Os nomes de secções são insensíveis a maiúsculas/minúsculas (todas as comparações acontecem após conversão para minúsculas).

'packages' é a lista de pacotes a serem adicionados quando esta Secção é listada no "bootstrap" - todos os nomes de pacotes têm de ser listados numa linha única ou a análise ao ficheiro irá falhar. Uma alternativa é definir a sua lista de pacotes como múltiplos grupos com os pacotes separados numa base de função / dependência, ex, base, Xorg, rede, etc. e listar cada grupo sob 'bootstrap'.

 bootstrap=base networking
 [base]
 packages=udev mtd-utils
 source=http://http.debian.net/debian
 keyring=debian-archive-keyring
 suite=jessie
 [networking]
 packages=netbase ifupdown iproute net-tools samba
 source=http://http.debian.net/debian
 keyring=debian-archive-keyring
 suite=jessie

Como um caso especial, o "multistrap" também suporta chaves de pacotes múltiplos por secção, uma linha para cada. As outras chaves não podem ser repetidas desta maneira.

 [Emdebian]
 packages=udev mtd-utils netbase ifupdown iproute
 packages=busybox net-tools samba
 source=http://http.debian.net/debian
 keyring=debian-archive-keyring
 suite=jessie

'source' é a fonte do apt a usar para esta Secção. Para usar uma fonte local na mesma máquina, certifique-se de usar "copy://" e não "file://", para que o apt saiba que deve copiar os pacotes para a rootfs em vez de assumir que pode tentar descarregá-los mais tarde - porque esse "mais tarde" nunca vai acontecer.

'keyring' lista o pacote que contém a chave usada pela fonte listada nesta secção. Se não for especificado um chaveiro, a opção "noauth" tem de ser definida para true. Veja Segurança do Apt.

'suite' é a suite a usar de esta fonte. Note que isto deve de ser a suite, e não o nome de código.

Suites change from time to time: (oldstable, stable, testing, sid) The codename (squeeze, wheezy, jessie, sid) does not change.

Segurança do Apt

Para usar repositórios apt autenticados, o multistrap precisa de ser capaz de instalar um pacote chaveiro apropriado a partir das fontes apt existentes fora do ambiente multistrap para o sistema de destino. Infelizmente, os pacotes chaveiro não podem ser descarregados a partir dos repositórios especificados na configuração do multistrap - isto porque o "apt" precisa que o chaveiro seja actualizado antes de usar repositórios anteriormente desconhecidos.

Se existirem pacotes relevantes, especifique-os na opção 'keyring' para cada repositório. O multistrap irá então verificar se o apt já instalou este pacote para que o repositório possa ser autenticado antes que quaisquer pacotes sejam descarregados dele.

Note que todos os repositórios a serem usados com multistrap têm que ser autenticados ou o apt irá falhar. De modo semelhante, secure apt só pode ser desactivado para todos os repositórios (usando a opção de linha de comandos --no-auth ou definindo a opção geral noauth no ficheiro de configuração), mesmo que apenas um repositório não tenha disponível um chaveiro apropriado.

O(s) pacote(s) chaveiro (keyring) serão também instalados dentro do ambiente multistrap para coincidir com as fontes apt instaladas para o multistrap.

Estado

O multistrap não tem estado - se o directório existir, irá simplesmente prosseguir como normalmente e o apt irá tentar prosseguir de onde ficou.

Configuração do Sistema de Ficheiros Raiz

o multistrap desempacota os pacotes descarregados mas não serão tentados outros estágios da configuração do sistema. Os exemplos incluem:

 /etc/inittab
 /etc/fstab
 /etc/hosts
 /etc/securetty
 /etc/modules
 /etc/hostname
 /etc/network/interfaces
 /etc/init.d
 /etc/dhcp3

Quaisquer nós de dispositivo de dispositivo específico irá também precisar de ser criado usando MAKEDEV ou "device-table.pl" - um script de ajuda que pode contornar alguns dos problemas com o MAKEDEV. device-table.pl requer um ficheiro de tabela de dispositivos na linha daquele no pacote fonte mtd-utils. Veja /usr/share/doc/multistrap/examples/device_table.txt

Após o multistrap ter criado com sucesso a disposição básica de ficheiros e oesquema de directórios, são necessários outros scripts específicos do dispositivo antes que o sistema de ficheiros possa ser empacotado e instalado no dispositivo de destino.

Após instalados, os próprios pacotes precisam de ser configurados usando os scripts do responsável do pacote e "dpkg --configure -a", a menos que isto seja um multistrap nativo.

Para que o "dpkg" funcione, /proc e /sysfs precisam de estar montados (ou serem montáveis), também é recomendado /dev/pts.

Veja também: http://wiki.debian.org/Multistrap

Ambiente

Para configurar os pacotes desempacotados (seja em modo nativo ou cruzado), são necessárias certas variáveis de ambiente:

O debconf precisa que lho digam para aceitar que a interacção com o utilizador não é desejada:

 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true

O Perl precisa que lho digam para aceitar que não há locales disponíveis dentro da chroot e não se queixar:

 LC_ALL=C LANGUAGE=C LANG=C

Depois, o dpkg pode configurar os pacotes:

método de chroot (PATH = directório de topo da chroot):

 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
 LC_ALL=C LANGUAGE=C LANG=C chroot /PATH/ dpkg --configure -a

numa shell de login:

 # export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
 # export LC_ALL=C LANGUAGE=C LANG=C 
 # dpkg --configure -a

(Como em cima, o dpkg precisa de /proc e /sysfs montados primeiro.)

Modo nativo - multistrap

o multistrap não foi destinado a suporte nativo, foi desenvolvido para suporte a compilação de outras arquitecturas. De modo a se usar múltiplos repositórios, o multistrap apenas desempacota os pacotes seleccionados pelo apt.

Em modo nativo, é provável serem necessárias várias operações post-multistrap que o debootstrap faria por si:

 1. copiar /etc/hosts para a chroot
 2. limpar o ambiente para apagar as variáveis LANGUAGE, LC_ALL e LANG
    para silenciar avisos sem sentido do perl que escondem outros erros

(Uma alternativa a apagar as variáveis de localização é adicionar locales ao seu ficheiro de configuração multistrap na opção 'packages').

Um multistrap nativo pode ser usado directamente com a chroot, de modo a que "multistrap" corra "dpkg --configure -a" no final do processo multistrap, a menos que a opção ignorenativearch seja regulada para true na secção General do ficheiro de configuração.

Daemons em chroots

Dependendo de qual sistema você usa para disponibilizar os pacotes para o "multistrap", as chroots nativas geralmente não devem permitir que daemons arranquem dentro da chroot. Use o /usr/share/multistrap/chroot.sh como o seu "setupscript" ou inclua esse script no seu próprio script de configuração.

 setupscript=/usr/share/multistrap/chroot.sh

chroot.sh coopera com sistemas que usam sysvinit e upstart.

Veja também

 http://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt

Configuração em cascata

Para suportar múltiplas variantes duma configuração básica (comum), "multistrap" permite ficheiros de configuração para incluir outros ficheiros de configuração (mais gerais). Isto é, o ficheiro de configuração mais detalhado / específico é especificado na linha de comandos e esse ficheiro inclui outro ficheiro que é partilhado por outras configurações.

Ficheiro base:

 /usr/share/multistrap/crosschroot.conf

Variações:

 /usr/share/multistrap/armel.conf

Especificar apenas o ficheiro armel.conf irá obter o resto das definições de crosschroot.conf para que as alterações comuns só precisem ser feitas num único ficheiro.

É fortemente recomendado que quaisquer modificações nos ficheiros de configuração envolvidas em qualquer cascata particular sejam testadas usando a opção "--simulate" do multistrap o que irá gerar um sumário das opções que foram definidas após a cascata estar completa. Note que o multistrap não o avisa se um ficheiro de configuração conter uma opção não reconhecida (para compatibilidade futura com configurações backport), portanto um simples erro de escrita pode resultar numa opção não definida.

Suporte a Machine:variant

As variáveis packages-conf antigas de emsandbox podem ser convertidas em variáveis de configuração "multistrap". O suporte a machine:variant em "multistrap" concentra-se nos scripts config.sh e setup.sh

Nota: o suporte a machine:variant é provável que seja substituido pela funcionalidade hook descrita em baixo.

Após o "multistrap" ter desempacotado os pacotes descarregados, pode ser chamado o "setup.sh", passando a localização e arquitectura do sistema de ficheiros raiz, para que possam ter lugar outras afinações. Neste estágio, quaisquer operações dentro duma rootfs de arquitectura alienígena não devem tentar executar quaisquer binários dentro da rootfs. Como estágio final do processo multistrap, o "config.sh" é copiado para o directório raiz da rootfs.

Uma vantagem de usar suporte a machine:variant é que o sistema de ficheiros raiz completo pode ser gerido por uma única chamada ao multistrap - isto é útil quando se constrói sistemas de ficheiros raiz no espaço do utilizador.

Para activar suporte a machine:variant, especifique o caminho para os scripts a serem chamados no ficheiro de configuração de variantes (secção General):

 [General]
 include=/caminho/para/general.conf
 setupscript=/caminho/para/setup.sh
 configscript=/caminho/para/config.sh

Assegure que ambos setupscript e configscript são executáveis ou o "multistrap" irá ignorar os scripts.

 #!/bin/sh
 
 set -e
 
 export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
 export LC_ALL=C LANGUAGE=C LANG=C
 /var/lib/dpkg/info/dash.preinst install
 dpkg --configure -a
 mount proc -t proc /proc
 dpkg --configure -a
 umount /proc
    

Para mais informações, veja a Wiki: http://wiki.debian.org/Multistrap

/proc pode ser montado dentro da chroot, como em cima:

 mount proc -t proc /proc
    

No entanto, /dev deve ser montado de fora da chroot, antes de correr qualquer "configscript.sh" na chroot.

 cd /path/chroot/
 sudo tar -xzf /path/multistrap.tgz
 sudo mount /dev -o bind ./dev/
 sudo chroot . ./configscript.sh || true
    

Restringindo a selecção de pacotes

"multistrap" inclui os pacotes necessários (Required) por predefinição, a lista actual de pacotes na sua própria máquina pode ser vista usando:

 grep-available  -FPriority 'required' -sPackage

(A lista real é calculada a partir dos ficheiros Packages descarregados e pode diferir do resultado de "grep-available".)

Se a opção OmitRequired for definida para true, estes pacotes não serão adicionados - embora útil, esta opção pode levar facilmente a um rootfs inútil. Apenas os pacotes especificados manualmente nos ficheiros de configuração serão usados nos cálculos - as dependências desses pacotes serão adicionadas mas mais nenhuns.

Adicionar pacotes de Priority: important

O "multistrap" pode imitar o "debootstrap" ao adicionar automaticamente todos os pacotes de todas as secções onde o ficheiro Packages descarregado liste o pacote como Priority: important. A predefinição é não adicionar tais pacotes a menos que sejam incluídos individualmente numa opção "packages=" numa secção especificada nas opções gerais do "bootstrap". Para adicionar tais pacotes, regule a opção addimportant para verdadeiro na secção geral.

 addimportant=true

Priority: important apenas pode operar para todas as secções listadas na opção "bootstrap". Isto pode causar alguma confusão quando se misturam suites.

Não é possível activar addimportant e omitrequired na mesma configuração. O "multistrap" irá terminar com erro código 7 se qualquer configuração resultar em que ambos addimportant e omitrequired seja regulados para verdadeiro. (Isto inclui os efeitos de incluir outros ficheiros de configuração.)

Comportamento das recomendações

O comportamento predefinido da Debian após o lançamento do Lenny era considerar os pacotes recomendados como pacotes extra a serem instalados quando qualquer um pacote era seleccionado. Os pacotes recomendados são aqueles que o responsável considera que deverão estar presentes na "maioria" das instalações desse pacote e permite as Recomendações significa permitir também as Recomendações de pacotes recomendados e por aí fora.

A predefinição do multistrap é DESLIGAR as recomendações.

Define a opção allowrecommends para true na secção General para usar o comportamento típico da Debian.

Lançamento predefinido

"multistrap" suporta uma opção para definir explicitamente o lançamento predefinido a usar com o apt: "aptdefaultrelease". Isto determina qual o lançamento o apt irá usar para os pacotes do sistema base e não é o mesmo que fazer 'pinning' (o que se relaciona com o uso do apt após a instalação). Multistrap define o lançamento predefinido para a wildcard * a menos que um lançamento seja nomeado no capo "aptdefaultrelease". Qualquer lançamento especificado aqui deve também ser definido na estrofe referenciada na lista bootstrap ou o apt irá falhar.

Para instalar uma versão específica de um pacote de um lançamento mais recente que aquele especificado como predefinido, "explicitsuite" deve também ser definido para verdadeiro se o pacote existir em qualquer versão no lançamento predefinido. Também, quaisquer pacotes do qual esse pacote tenha uma dependência estrita (isto é = em vez de >=) devem também ser adicionados à linha packages na estrofe para a versão desejada, mesmo que esses pacotes não precisem de ser listados para serem obtidos do lançamento predefinido. Isto é comportamento típico do apt e não é um bug do multistrap.

A combinação do lançamento predefinido, suite explícita e preferências do apt pode facilmente tornar-se complexa e os bugs podem ser difíceis de identificar. "multistrap" escreve sempre a linha de comandos do apt completa, portante teste você mesmo este comando (usando os ficheiros escritos pelo "multistrap") para ver o que se passa. Lembre-se que todas as resoluções de dependências e toda a lógica para determinar qual a versão de um pacote especifico vai ser instalada na sua chroot "multistrap" é feita inteiramente pelo apt e todo o que o "multistrap" pode fazer é passar ficheiros e opções de linha de comandos ao apt.

Veja também: Preferências do Apt

Especificação de suite específica

Por vezes, o apt precisa que lhe digam para obter um pacote particular de uma suite particular, ignorando uma versão mais recente numa outra suite no mesmo conjunto de fontes.

"multistrap" pode operar com ou sem a opção de suite explícita, a predefinição é deixar o apt usar a versão mais recente da colecção de fontes bootstrap especificadas.

A especificação de suite explícita não tem efeito no sistema final instalado - se o seu aptsources incluir um repositório que por sua vez inclui uma versão mais recente dos pacotes especificados explicitamente, o próximo "apt-get upgrade" no dispositivo irá trazer a versão mais recente.

Também, quando se especifica pacotes a obter de uma suite específica, o apt irá também tentar assegurar que as dependências desse pacote venham também da mesma suite e isso pode fazer com que o apt seja incapaz de resolver o conjunto completo de dependências. Nesta situação, ser explícito acerca de uma selecção de pacote pode requerer ser explícito acerca de algumas (não necessariamente de todas) das dependências desse pacote também.

Quando usar explicitsuite, tome o cuidado de usar stable-proposed-updates ou outras localizações temporárias - se o pacote migrar para outra suite e for removido da suite temporária (como com *-proposed-updates), o multistrap não será capaz de encontrar o pacote.

O manuseamento de suites explícitas pode ser muito difícil de se conseguir correctamente. Em geral, é melhor criar uma pequena chroot de bootstrap da sua arquitectura nativa, depois fazer chroot para ela, adicionar as fontes do apt relevantes e trabalhar exactamente quais comandos são necessários para obter a mistura de pacotes correcta. Evite especificar versões especificas para despistar problemas, trabalhe apenas com suites. Aqui pode ser útil fazer 'pinning' às preferências do apt, veja as preferências do Apt.

Preferências do Apt

Se um ficheiro apropriado estiver listado na opção aptpreferences da secção General do ficheiro de configuração, este ficheiro será copiado para o directório de preferências do apt do bootstrap antes do apt ser usado pela primeira vez.

Quando um ficheiro de preferências de apt é disponibilizado, o comportamento "Lançamento-Predefinido" do "multistrap" é desactivado.

Como com quaisquer outros ficheiros e scripts externos, o conteúdo do ficheiro de preferências do apt está além do objectivo deste manual. O "multistrap" não tenta verificar o ficheiro fornecido para além de assegurar que este possa ser lido.

Omitir listagens deb-src

Alguns ambientes multistrap não precisam de acesso às fontes Debian dos pacotes que são instalados, tipicamente isto é necessário quando se prepara uma chroot de construção (ou construção para outra plataforma) usando o multistrap.

Para desligar esta fonte adicional (e poupar em ambos tempo de download e tamanho da apt-cache), use o campo omitdebsrc em cada Secção.

 [Baked]
 packages=
 source=http://www.emdebian.org/baked
 keyring=emdebian-archive-keyring
 suite=testing
 omitdebsrc=true

omitdebsrc é necessário quando se usa pacotes de debian-ports onde os pacotes não têm fontes, excepto "unreleased".

fakeroot

Os bootstraps de arquitectura diferente podem operar sob "fakeroot" ("multistrap" está desenhado para fazer o máximo que possa dentro de uma chamada única para facilitar isto) mas o estágio de configuração que normalmente acontece com um bootstrap de arquitectura nativa requer "chroot" e o próprio "chroot" não irá operar sob "fakeroot".

Portanto, se o "multistrap" detectar que "fakeroot" está em uso, a configuração de modo nativo é saltada com um aviso de lembrança.

O mesmo problema aplica-se ao "apt-get install" e por isso a instalação do pacote chaveiro no sistema anfitrião é também saltado se for detectado o fakeroot.

Manusear pacotes problemáticos

Por vezes, uma pacote particular irá falhar até ao desempacotar apropriadamente se outros pacotes ainda não foram desempacotados. Isto pode acontecer se as diversões do dpkg não estiverem configuradas correctamente ou se o pacote tem uma pré-dependência dum executável de outro pacote.

Multistrap oferece dois modos de lidar com estes problemas. Um pacote pode ser listado como "reinstall" ou como "additional". Cada secção no ficheiro de configuração do "multistrap" pode ter uma única listagem "reinstall" ou "additional" ou ambas.

Reinstall significa que o pacote irá ser descarregado e desempacotado como normal - juntamente com todos os outros pacotes, mas será depois reinstalado no fim ao executar o script "preinst" do responsável do pacote com o argumento "upgrade". O "dpkg" irá então continuar o resto da configuração desse pacote.

Additional adiciona uma segunda volta de "apt-get install" ao processo do multistrap - após o desempacotar inicial. O pacote adicional irá então ser descarregado e desempacotado. Se executado nativamente, o pacote adicional é descarregado, desempacotado e configurado após todos os pacotes restantes terem sido descarregados, desempacotados e configurados.

Nem "reinstall" nem "additional" devem ser vistos como mais do que apenas meios de contorno e devem ser preenchidos bugs de wishlist em Debian contra os pacotes que requerem o uso destes mecanismos (ou dos pacotes que iram prevenir um determinado pacote de operar normalmente).

Pré-semear Debconf

Adicionar uma semente debconf pode ajudar a configurar pacotes para uma definição particular em vez da predefinição do pacote quando se correr a configuração de modo não interactivo. Veja http://www.debian-administration.org/articles/394 para informação sobre como criar ficheiros semente.

Podem ser especificados múltiplos ficheiros semente usando o campo debconfseed na secção [General], separados por espaços.

 debconfseed=seed1 seed2

Os ficheiros que não existem ou não podem ser abertos serão ignorados em silêncio. Verifique os resultados da análise usando a opção "--simulate" para o "multistrap". Os ficheiros precedentes serão copiados para um directório precedente em /tmp dentro da rootfs.

Para usar o precedente, adicione uma secção ao configscript.sh, antes de quaisquer chamadas a dpkg --configure -a. ex. :

 #!/bin/sh
 
 set -e
 
 export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
 export LC_ALL=C LANGUAGE=C LANG=C
 if [ -d /tmp/preseeds/ ]; then
    for file in `ls -1 /tmp/preseeds/*`; do
    debconf-set-selections $file
    done
 fi
 dpkg --configure -a

Hooks

Se um directório (hookdir=) hook for especificado na secção General do ficheiro de configuração do "multistrap", os scripts hook que são executáveis serão executados a partir de fora do directório multistrap nos seguintes estágios:

Executados antes do desempacotamento ser iniciado, imediatamente após os pacotes terem sido descarregados. Os hooks de download são scripts executáveis no directório hook especificado com o nome de ficheiro a começar com download.
Os hooks nativos são executados apenas em modo nativo, imediatamente antes de arrancar a configuração dos pacotes descarregados e de novo após a conclusão da configuração de pacotes. Os hooks nativos serão chamados de o caminho absoluto e o estado de progresso actual, inicio ou fim.

Scripts nativos são scripts executáveis no directório de hook especificado com o nome de ficheiro a começar com native.

Executado imediatamente antes do tarball ser criado ou o "multistrap" termina se não estiver configurado para criar um tarball.

Scripts de acabamento são scripts executáveis no directório de hook especificado com o nome de ficheiro a começar com completion.

Aos hooks é passado o caminho absoluto ao directório que será o directório de nível de topo do sistema chroot ou multistrap. Os hooks que não podem ser resolvidos usando realpath ou que não sejam executáveis serão ignorados.

Todos os hooks de um tipo são ordenados por ordem alfabética antes de serem executados.

Note que o "multistrap" não desfaz os efeitos dos hooks em caso de erros. No entanto, o "multistrap" irá reportar os erros acumulados como avisos. Se um hook termina com não-zero, esse valor é convertido para um número positivo e adicionado à contagem total de avisos, e reportado no final da operação.

Saída

O "multistrap" pode produzir imensas mensagens de saída - as mensagens informativas aparecem no STDOUT, os erros e avisos no STDERR. As chamadas a "apt" e "dpkg" respeitam o mesmo padrão, portanto é simples recortar a saída combinado do "multistrap" para apenas os erros, se desejado.

O "multistrap" acumula estados de erros de processos não fatais dentro da operação e reporta estes como avisos no STDERR assim como termina com o erro da contagem acumulada. Isto inclui os hooks que reportem valores de saída a não-zero.

Bugs

Como o "multistrap" está a ficar mais complexo, os bugs irão aparecer no pacote. Por favor reporte todos os bugs para o BTS do Debian usando a ferramenta "reportbug" e por favor anexe todos os ficheiros de configuração. Se a sua configuração precisa de aceder a repositórios do apt locais ou privados, por favor verifique a sua configuração com a versão mais recente do "multistrap" em Debian usando a opção "--simulate" e inclua esse relatório no seu relatório de bug.

O resultado da opção "--simulate" é regularmente expandido para ajudar os utilizadores a depurar problemas nos ficheiros de configuração.

Por favor verifique também (e actualize) o wiki do Multistrap em http://wiki.debian.org/Multistrap e o conteúdo da página web do Multistrap em http://www.emdebian.org/multistrap/ antes de preencher bugs. Várias pessoas na lista de mail debian-embedded@lists.debian.org e no canal de IRC #emdebian a irc.oftc.net também podem ajudar se o seu ficheiro de configuração não for analisado correctamente. Você irá precisar de colocar o resultado da opção "--simulate" num site web de colagem binária e colocar o URL na sua mensagem.

Suporte a MultiArch

O suporte a Multiarch é experimental - por favor reporte problemas e submeta bugs com os detalhes completo da sua configuração, o ficheiro completo de configuração do multistrap e os erros reportados.

O "multistrap" sobrepõe o suporte de multiarch existente do sistema externo para quem sistema com capacidades de MultiArch possa ainda criar uma chroot não-MultiArch a partir de repositórios que não suportem todas as arquitecturas suportadas pelo dpkg externo.

Se multiarch estiver activa dentro da chroot do multistrap, o "multistrap" escreve a lista em /var/lib/dpkg/arch dentro da chroot.

Para múltiplas arquitecturas, especifique a opção uma vez e use uma lista separada por espaços para a lista de arquitecturas. Certifique-se de incluir a que irá ser a arquitectura anfitriã da chroot.

Veja também http://wiki.debian.org/Multiarch/

 [General]
 ...
 multiarch=i386 armel armhf

Cada secção irá instalar pacotes da arquitectura base a menos que a opção "Architecture" seja especificada para secções particulares.

 [Foreign]
 packages=libgcc1 libc6
 architecture=armel
 source=http://ftp.uk.debian.org/debian
 keyring=debian-archive-keyring
 suite=sid

Na saída do "--simulate", a(s) arquitectura(s) especificada(s) na opção MultiArch serão listadas sob a listagem "Arquitecturas estrangeiras". Os pacotes para uma arquitectura especifica serão listados como o nome do pacote seguido por "dois pontos" e seguido pela arquitectura.

 libgcc1:armel libc6:armel
2020-03-22 perl v5.30.0