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.2.
Transferência (HTTP): https://archive.mozilla.org/pub/firefox/releases/128.1.0esr/source/firefox-128.1.0esr.source.tar.xz
Soma de verificação MD5 da transferência: efbf349f0b7442fc6f2995bef4d32785
Tamanho da transferência: 536 MB
Espaço em disco estimado exigido: 6,7 GB (223 MB instalado) sem testes
Tempo de construção estimado: 15 UPC usando -j8, sem testes
O nome do diretório é firefox-128.1.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.27.0, GTK+-3.24.43, libnotify-0.8.3, LLVM-18.1.7 (com clang, usado para bindgen mesmo se usar gcc), nodejs-20.16.0, PulseAudio-17.0 (ou alsa-lib-1.2.12 se você editar o mozconfig; agora obsoleto pela Mozilla), em qualquer caso, por favor, leiam-se as Informações de Configuração, Python-3.12.5 (depois de instalar SQLite-3.46.1), startup-notification-0.12 e UnZip-6.0
ICU-75.1, libevent-2.1.12, libvpx-1.14.1, libwebp-1.4.0, NASM-2.16.03 e nss-3.103
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.9.1, Doxygen-1.12.0, FFmpeg-7.0.2 (tempo de execução, para reproduzir arquivos mov, mp3 ou mp4), GeoClue-2.7.1 (tempo de execução), liboauth-1.0.3, pciutils-3.13.0 (tempo de execução), Valgrind-3.23.0, Wget-1.24.5, 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"
# If you have a multicore machine, all cores will be used by default.
# If you have installed (or will install) wireless-tools, and you wish
# to use geolocation web services, comment out this line
ac_add_options --disable-necko-wifi
# Comment out the following line if you wish not to use Google's Location
# Service (GLS). Note that if Geoclue is installed and configured to use
# GLS (as the BLFS instruction does), Firefox can access GLS via Geoclue
# anyway. On the other hand if Geoclue is not installed (or not properly
# configured) and this line is commented out, the website requiring a
# location service will not function properly.
ac_add_options --with-google-location-service-api-keyfile=$PWD/google-key
# startup-notification is required since firefox-78
# Uncomment the following option if you have not installed PulseAudio and
# want to use alsa instead
#ac_add_options --enable-audio-backends=alsa
# Comment out following options if you have not installed
# recommended dependencies:
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
# The libdav1d library (av1 decoder) requires nasm. Uncomment this
# if nasm has not been installed. Do not uncomment this if you have
# ffmpeg installed.
#ac_add_options --disable-av1
# You cannot distribute the binary if you do this.
ac_add_options --enable-official-branding
# Stripping is now enabled by default.
# Uncomment these lines if you need to run a debugger:
#ac_add_options --disable-strip
#ac_add_options --disable-install-strip
# Disabling debug symbols makes the build much smaller and a little
# faster. Comment this if you need to run a debugger.
ac_add_options --disable-debug-symbols
# The BLFS editors recommend not changing anything below this line:
ac_add_options --prefix=/usr
ac_add_options --enable-application=browser
ac_add_options --disable-crashreporter
ac_add_options --disable-updater
# Enabling the tests will use a lot more space and significantly
# increase the build time, for no obvious benefit.
ac_add_options --disable-tests
# This enables SIMD optimization in the shipped encoding_rs crate.
ac_add_options --enable-rust-simd
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
# Sandboxing works well on x86_64 but might cause issues on other
# platforms, e.g. i686.
[ $(uname -m) != x86_64 ] && ac_add_options --disable-sandbox
# Using sandboxed wasm libraries has been moved to all builds instead
# of only mozilla automation builds. It requires extra llvm packages
# and was reported to seriously slow the build. Disable it.
ac_add_options --without-wasm-sandboxed-libraries
# The following option unsets Telemetry Reporting. With the Addons Fiasco,
# Mozilla was found to be collecting user's data, including saved passwords and
# web form data, without users consent. Mozilla was also found shipping updates
# to systems without the user's knowledge or permission.
# As a result of this, use the following command to permanently disable
# telemetry reporting in Firefox.
unset MOZ_TELEMETRY_REPORTING
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build-dir
EOF
Adapte dois arquivos para compatibilidade com cbindgen-0.27.0 ou posterior:
sed 's/input.try/&_parse/' \ -i servo/components/style_traits/values.rs && sed '0,/"Keyframe"/{//d}' -i servo/ports/geckolib/cbindgen.toml
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:
A chave de API do Google abaixo é específica para o LFS. Se usar essas instruções para outra distribuição ou se você 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.
echo "AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ" > google-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 && ./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 && ./mach install
Esvazie as variáveis de ambiente que foram configuradas acima:
unset MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE unset MOZBUILD_STATE_PATH
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=journald&
(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).