Firefox é um navegador autônomo baseado na base de código Mozilla.
Esse pacote é conhecido por construir e funcionar corretamente usando uma plataforma LFS 12.1.
Transferência (HTTP): https://archive.mozilla.org/pub/firefox/releases/115.8.0esr/source/firefox-115.8.0esr.source.tar.xz
Soma de verificação MD5 da transferência: 212e126b43e8fb72a7314f2c3256b79f
Tamanho da transferência: 485 MB
Espaço em disco estimado exigido: 6,1 GB (199 MB instalado) sem testes
Tempo de construção estimado: 12 UPC usando -j8, sem testes
O nome do diretório é firefox-115.8.0
Extrair o tarball reconfigurará as permissões do diretório atual
para 0755, se você tiver permissão para fazer isso. Se você fizer
isso em um diretório onde o bit sticky estiver configurado, como
/tmp
, ela terminará com mensagens
de erro:
tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-xr-t: Operation not permitted
tar: Exiting with failure status due to previous errors
Isso finaliza com situação diferente de zero, mas NÃO significa que existe um problema
real. Não desempacote como o(a) usuário(a) root
em um diretório onde o bit sticky
estiver configurado - isso irá desconfigurá-lo.
Tal como acontece com outros pacotes grandes que usam C++ (ou rust), os tempos de UPC para construir isso variam mais amplamente que você poderia esperar. Os tempos de construção aumentarão significativamente se tua máquina tiver que trocar.
Embora o(a) desenvolvedor(a) prefira usar PulseAudio, no momento Alsa ainda pode ser usado. Ambos possivelmente precisem de configuração de tempo de execução para que o som funcione.
Cbindgen-0.26.0, dbus-glib-0.112, GTK+-3.24.41, libnotify-0.8.3, LLVM-17.0.6 (com clang, usado para bindgen mesmo se usar gcc), nodejs-20.11.1, PulseAudio-17.0 (ou alsa-lib-1.2.11 se você editar o mozconfig; agora obsoleto pela Mozilla), em qualquer caso, por favor, leiam-se as Informações de Configuração, Python-3.11.1 (construído depois de instalar SQLite-3.45.1), startup-notification-0.12 e UnZip-6.0
ICU-74.2, libevent-2.1.12, libvpx-1.14.0, libwebp-1.3.2, NASM-2.16.01 e nss-3.98
Se você não instalar as dependências recomendadas, então cópias internas desses pacotes serão usadas. Elas podem ter sido testadas para funcionar, mas podem estar desatualizadas ou conter falhas de segurança.
cURL-8.6.0, Doxygen-1.10.0, FFmpeg-6.1.1 (tempo de execução, para reproduzir arquivos mov, mp3 ou mp4), liboauth-1.0.3, pciutils-3.10.0 (tempo de execução), Valgrind-3.22.0, Wget-1.21.4, Wireless Tools-29, yasm-1.3.0, libproxy
Observações de Editor(a): https://wiki.linuxfromscratch.org/blfs/wiki/firefox
A configuração do Firefox é
realizada criando-se um arquivo mozconfig
contendo as opções desejadas de
configuração. Um mozconfig
padrão é
criado abaixo. Para ver a lista completa de opções de configuração
disponíveis (e uma descrição abreviada de algumas delas), emita
./mach configure -- --help |
less. Você também possivelmente revise o arquivo
inteiro e descomente quaisquer outras opções desejadas. Crie o
arquivo emitindo o seguinte comando:
cat > mozconfig << "EOF"
# Se você tiver uma máquina multi cores, todos os cores serão usados por padrão.
# Se você tiver instalado (ou instalará) o "wireless-tools" e desejar
# usar serviços de geolocalização da web, comente esta linha
ac_add_options --disable-necko-wifi
# Chaves de API para APIs de geolocalização - necko-wifi (acima) é exigido para MLS.
# Descomente a linha seguinte se desejar usar o Serviço de Localização do Mozilla
#ac_add_options --with-mozilla-api-keyfile=$PWD/mozilla-key
# Descomente a linha seguinte se desejar usar a API de geolocalização do Google
# (necessária para uso com mapas salvos com o Google Maps)
#ac_add_options --with-google-location-service-api-keyfile=$PWD/google-key
# notificação de inicialização é necessária desde o Firefox-78
# Descomente a seguinte opção se você não tiver instalado o PulseAudio
# e quiser usar o alsa
#ac_add_options --enable-audio-backends=alsa
# Comente as seguintes opções se você não tiver instalado
# as dependências recomendadas:
ac_add_options --with-system-icu
ac_add_options --with-system-libevent
ac_add_options --with-system-libvpx
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
ac_add_options --with-system-webp
# Ao contrário do Thunderbird, embora usar o vinculador Gold possa
# economizar quatro megabytes no arquivo instalado, isso não torna
# a construção mais rápida.
# A biblioteca libdavid (decodificador av1) exige nasm. Descomente isto
# se o nasm não tiver sido instalado. Não descomente se você tiver o
# ffmpeg instalado.
#ac_add_options --disable-av1
# Você não pode distribuir o binário se fizer isto
ac_add_options --enable-official-branding
# A remoção agora está habilitada por padrão. Descomente estas linhas
# se você precisar executar um depurador:
#ac_add_options --disable-strip
#ac_add_options --disable-install-strip
# Desabilitar os símbolos de depuração torna a construção muito menor e um pouco
# mais rápida. Comente isto se você precisar executar um depurador. Observação: Isto é
# exigido para compilação em i686.
ac_add_options --disable-debug-symbols
# Foi informado que elf-hack causa instalações falhas (depois de construções bem-sucedidas)
# em algumas máquinas. Supõe-se que melhore o tempo de inicialização e reduza a libxul.so em
# alguns MB. Com lançamentos recentes do Binutils, o vinculador já suporta
# uma maneira muito mais segura e genérica para isso.
ac_add_options --disable-elf-hack
export LDFLAGS="$LDFLAGS -Wl,-z,pack-relative-relocs"
# Os(As) editores(as) do BLFS recomendam não mudar nada abaixo desta linha:
ac_add_options --prefix=/usr
ac_add_options --enable-application=browser
ac_add_options --disable-crashreporter
ac_add_options --disable-updater
# Habilitar os testes usará muito mais espaço e aumentará significativamente
# o tempo de construção, sem nenhum benefício óbvio.
ac_add_options --disable-tests
# O nível padrão de otimização novamente produz uma construção funcional com o gcc.
ac_add_options --enable-optimize
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman
ac_add_options --with-system-jpeg
ac_add_options --with-system-png
ac_add_options --with-system-zlib
# O sandboxing funciona bem em x86_64, mas pode causar problemas em outras
# plataformas. Se não estiver em x86_64, por exemplo, i686, é recomendado
# descomentar a seguinte chave.
#ac_add_options --disable-sandbox
# Usar bibliotecas wasm em sandbox foi movido para todas as construções, em vez de
# apenas construções de automação do Mozilla. Exige pacotes extras llvm e foi
# informado que retarda seriamente a construção. Desative-o.
ac_add_options --without-wasm-sandboxed-libraries
# A opção seguinte desabilita o Informe de Telemetria. Com o Add-on Fiasco,
# constatou-se que a Mozilla estava coletando dados de usuário(a), incluindo senhas salvas
# e dados de formulários da web, sem o consentimento dos(as) usuários(as). Constatou-se, também,
# que a Mozilla estava enviando atualizações para sistemas sem o conhecimento ou permissão do(a)
# usuário(a). Como resultado disso, use o seguinte comando para desabilitar permanentemente
# os informes de telemetria no Firefox.
unset MOZ_TELEMETRY_REPORTING
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build-dir
EOF
Se construir com o ICU do sistema, adapte o mapeamento de quebra de linha para ICU 74 ou posterior. Esta construção adiciona cinco entradas para um vetor c++.
for i in {43..47}; do sed -i '/ZWJ/s/}/,CLASS_CHARACTER&/' intl/lwbrk/LineBreaker.cpp done
Compile o Firefox emitindo os seguintes comandos:
Se as APIs de geolocalização forem necessárias:
As chaves de API do Google e Mozilla abaixo são específicas para o LFS. Se usar essas instruções para outra distribuição ou se pretender distribuir cópias binárias do software usando essas instruções, por favor, obtenha as tuas próprias chaves seguindo as instruções localizadas em https://www.chromium.org/developers/how-tos/api-keys e https://location.services.mozilla.com/api respectivamente.
echo "AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ" > google-key echo "613364a7-9418-4c86-bcee-57e32fd70c23" > mozilla-key
Se você estiver compilando esse pacote em chroot, você precisa
assegurar que /dev/shm
esteja
montado. Se você não fizer isso, a configuração do Python falhará com um informe de
rastreamento reverso referenciando /usr/lib/pythonN.N/multiprocessing/synchronize.py
.
Como o(a) usuário(a) root
,
execute:
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
Agora invoque o conjunto de comandos sequenciais Python mach para compilar o pacote.
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none && export MOZBUILD_STATE_PATH=${PWD}/mozbuild && export PYTHON311=/opt/python3.11/bin/python3.11 && $PYTHON311 ./mach build
O mozconfig
acima desabilita os
testes porque eles usam muito mais tempo e espaço em disco sem
nenhum benefício óbvio. Se você, mesmo assim, os tiver ativado,
poderá executar os testes executando ./mach gtest. Isso exigirá uma
conexão de rede de intercomunicação e será executado a partir de
uma sessão do Xorg - existe uma caixa de diálogo pop-up quando ele
falha ao se conectar ao ALSA (isso não cria um teste com falha). Um
ou dois testes falharão. Para ver os detalhes da(s) falha(s), você
precisará registrar a saída gerada a partir desse comando, de forma
que consiga revisá-la(s).
Agora, como o(a) usuário(a) root
:
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none && export PYTHON311=/opt/python3.11/bin/python3.11 && $PYTHON311 ./mach install
Esvazie as variáveis de ambiente que foram configuradas acima:
unset MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE unset MOZBUILD_STATE_PATH unset PYTHON311
export
MOZBUILD_STATE_PATH=${PWD}/mozbuild: A construção
te informa que pretende criar ~/.mozbuild
e te oferece uma opção para
pressionar <ENTER> para aceitar isso ou Ctrl-C para cancelar
e reiniciar a construção depois de especificar o diretório. Na
prática, a mensagem possivelmente não apareça até depois do
<ENTER> ser pressionado, ou seja, a construção para.
Esse diretório é usado para um (provavelmente aleatório) identificador de telemetria. Criar esse diretório dentro do construção da construção e deletá-lo depois da instalação evita que seja usado.
MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none: Use o Python do sistema para criar um ambiente virtual para o mach sem baixar nenhuma roda Python e sem usar os módulos Python do sistema. Isso evita incompatibilidades de versão entre módulos do sistema e os incluídos.
./mach build --verbose
: Use essa
alternativa se você precisar de detalhes a respeito de quais
arquivos estão sendo compilados, juntamente com quaisquer
sinalizadores C ou C++ sendo usados. Mas não adicione '--verbose'
ao comando de instalação, pois não é aceito lá.
./mach build -jN
: A construção deveria,
por padrão, usar todos os Elementos de Processamento de CPU online.
Se usar todos os Elementos de Processamento fizer com que a
construção use a área de troca porque você tem memória
insuficiente, usar menos Elementos de Processamento poderá ser mais
rápido.
: o BLFS costumava preferir usar gcc e g++ em
vez dos padrões do(a) desenvolvedor(a) dos aplicativos clang. Com o lançamento do gcc-12, a
construção demora mais tempo com gcc e g++, principalmente por
causa de avisos extras, e é maior. Configure essas variáveis de
ambiente antes de você executar o
conjunto de comandos sequenciais de configuração se
desejar continuar a usar gcc, g++. Construir com GCC no i?86
atualmente está quebrado.
CC=gcc
CXX=g++
Se você usa um ambiente de área de trabalho, como Gnome ou KDE,
você possivelmente queira criar um arquivo firefox.desktop
, de forma que o Firefox apareça nos menus do painel. Como o(a)
usuário(a) root
:
mkdir -pv /usr/share/applications &&
mkdir -pv /usr/share/pixmaps &&
MIMETYPE="text/xml;text/mml;text/html;" &&
MIMETYPE+="application/xhtml+xml;application/vnd.mozilla.xul+xml;" &&
MIMETYPE+="x-scheme-handler/http;x-scheme-handler/https" &&
cat > /usr/share/applications/firefox.desktop << EOF &&
[Desktop Entry]
Encoding=UTF-8
Name=Navegador da Web Firefox
Comment=Navegue a World Wide Web
GenericName=Navegador da Web
Exec=firefox %u
Terminal=false
Type=Application
Icon=firefox
Categories=GNOME;GTK;Network;WebBrowser;
MimeType=$MIMETYPE
StartupNotify=true
EOF
unset MIMETYPE &&
ln -sfv /usr/lib/firefox/browser/chrome/icons/default/default128.png \
/usr/share/pixmaps/firefox.png
As configurações de aplicativo para o Firefox são acessíveis digitando-se about:config na barra de endereço.
Ocasionalmente, conseguir som que funcione no firefox pode ser um problema. Embora o(a) desenvolvedor(a) prefira o pulseaudio, no geral, usar Alsa possivelmente seja mais fácil.
Se você habilitou o Alsa para som, você possivelmente precise alterar uma variável para obter som funcional. Se executar o firefox a partir de um terminal e tentar reproduzir algo com som, você poderá encontrar mensagens de erro como:
Sandbox: seccomp sandbox violation: pid
3941, tid 4030, syscall 16, args 48 2147767296 139909894784796 0
0 0.
Isso foi em x86_64, em i686 o número da chamada de sistema é 54. Para permitir esse chamada de sistema, em about:config mude security.sandbox.content.syscall_whitelist para 16 (ou 54 se usar i686).
Se usar pulseaudio
em um ambiente de área de trabalho, ele já poderá ter sido
iniciado por esse Ambiente. Mas se não tiver, embora o Firefox-57
conseguisse iniciá-lo, o Firefox-58 não consegue. Se executar o
firefox a partir de
um terminal e esse problema estiver presente, ao tentar
reproduzir o som, você encontrará mensagens de erro avisando
Can't get cubeb context!
A correção para isso é fechar o firefox, iniciar o pulseaudio
para verificar se ele inicia (se não, leiam-se as informações em
Configuração em PulseAudio-17.0) e reiniciar o firefox para
verificar se está funcionando. Se agora funcionar, adicione o
seguinte ao teu ~/.xinitrc
:
pulseaudio --verbose
--log-target=syslog&
(infelizmente, em alguns
sistemas, isso não funciona).
Você possivelmente deseje usar vários perfis no Firefox. Para fazer isso, invoque o Firefox como firefox --ProfileManager. Você também pode verificar qual perfil está em uso no momento a partir de about:profiles.
Embora o WebRender (usando a GPU para composição) não seja usado por padrão, agora parece funcionar bem em hardware compatível (GPUs ATI, Nvidia e Intel com Mesa-18 ou posterior). Para uma explicação, por favor, veja-se hacks.mozilla.org. A única desvantagem parece ser que, em uma máquina com RAM limitada, ele poderá usar mais RAM.
Para verificar se o WebRender está sendo usado, consulte about:support. Na seção Gráficos, a Composição ou mostrará 'Básico' (ou seja, não em uso) ou 'WebRender'. Para habilitá-lo, acesse about:config e mude gfx.webrender.all para True. Você precisará reiniciar o Firefox.
Possivelmente seja útil mencionar os processos provenientes do Firefox que podem aparecer no top - assim como o próprio firefox, possivelmente existam vários processos de Conteúdo da Web e agora um processo RDD (Remote Data Decoder) que aparece quando reproduzindo vídeos da web codificados com av1 (libdav1d). Se o WebRender tiver sido habilitado, um Processo de GPU também aparecerá quando o Firefox tiver que repintar (por exemplo, rolar, abrir uma nova guia ou reproduzir um vídeo).