Bug 1127565 - bootstrap.py not implemented for openSUSE r=froydnj

Differential Revision: https://phabricator.services.mozilla.com/D74544
This commit is contained in:
Nicklas Boman 2020-05-10 00:51:03 +00:00
parent 31791b1fce
commit a9633edb83
3 changed files with 173 additions and 1 deletions

View File

@ -77,7 +77,7 @@ the $PATH environment variable.
We recommend the following tools for installing Python:
pyenv -- https://github.com/yyuu/pyenv)
pyenv -- https://github.com/yyuu/pyenv
pythonz -- https://github.com/saghul/pythonz
official installers -- http://www.python.org/
'''

View File

@ -31,6 +31,7 @@ else:
# list in bin/bootstrap.py!
from mozboot.base import MODERN_RUST_VERSION
from mozboot.centosfedora import CentOSFedoraBootstrapper
from mozboot.opensuse import OpenSUSEBootstrapper
from mozboot.debian import DebianBootstrapper
from mozboot.freebsd import FreeBSDBootstrapper
from mozboot.gentoo import GentooBootstrapper
@ -274,6 +275,8 @@ class Bootstrapper(object):
cls = SolusBootstrapper
elif dist_id in ('arch') or os.path.exists('/etc/arch-release'):
cls = ArchlinuxBootstrapper
elif os.path.exists('/etc/SUSE-brand'):
cls = OpenSUSEBootstrapper
else:
raise NotImplementedError('Bootstrap support for this Linux '
'distro not yet available: ' + dist_id)

View File

@ -0,0 +1,169 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, print_function, unicode_literals
from mozboot.base import BaseBootstrapper
from mozboot.linux_common import (
ClangStaticAnalysisInstall,
LucetcInstall,
NasmInstall,
NodeInstall,
SccacheInstall,
StyloInstall,
WasiSysrootInstall,
)
class OpenSUSEBootstrapper(
NasmInstall, NodeInstall, StyloInstall, ClangStaticAnalysisInstall,
SccacheInstall, LucetcInstall, WasiSysrootInstall, BaseBootstrapper):
'''openSUSE experimental bootstrapper.'''
SYSTEM_PACKAGES = [
'autoconf213',
'nodejs',
'npm',
'which',
'python3-devel',
'rpmconf',
'libcurl-devel',
'libpulse-devel',
]
BROWSER_PACKAGES = [
'alsa-devel',
'gcc-c++',
'python3-dbus-python',
'python3-wheel',
'gtk3-devel',
'dbus-1-glib-devel',
'gconf2-devel',
'glibc-devel-static',
'libstdc++-devel',
'libXt-devel',
'libproxy-devel',
'libuuid-devel',
'yasm',
'gtk2-devel',
'clang-devel',
'patterns-gnome-devel_gnome',
]
BROWSER_GROUP_PACKAGES = [
'devel_C_C++',
'devel_gnome',
]
MOBILE_ANDROID_COMMON_PACKAGES = [
'java-1_8_0-openjdk',
'wget',
]
def __init__(self, version, dist_id, **kwargs):
print('Using an experimental bootstrapper for openSUSE.')
BaseBootstrapper.__init__(self, **kwargs)
def install_system_packages(self):
self.zypper_install(*self.SYSTEM_PACKAGES)
def install_browser_packages(self):
self.ensure_browser_packages()
def install_browser_group_packages(self):
self.ensure_browser_group_packages()
def install_browser_artifact_mode_packages(self):
self.ensure_browser_packages(artifact_mode=True)
def install_mobile_android_packages(self):
self.ensure_mobile_android_packages()
def install_mobile_android_artifact_mode_packages(self):
self.ensure_mobile_android_packages(artifact_mode=True)
def install_mercurial(self):
self.run_as_root(['pip', 'install', '--upgrade', 'pip'])
self.run_as_root(['pip', 'install', '--upgrade', 'Mercurial'])
def ensure_clang_static_analysis_package(self, state_dir, checkout_root):
from mozboot import static_analysis
self.install_toolchain_static_analysis(
state_dir, checkout_root, static_analysis.LINUX_CLANG_TIDY)
def ensure_browser_packages(self, artifact_mode=False):
# TODO: Figure out what not to install for artifact mode
self.zypper_install(*self.BROWSER_PACKAGES)
def ensure_browser_group_packages(self, artifact_mode=False):
# TODO: Figure out what not to install for artifact mode
self.zypper_patterninstall(*self.BROWSER_GROUP_PACKAGES)
def ensure_mobile_android_packages(self, artifact_mode=False):
# Multi-part process:
# 1. System packages.
# 2. Android SDK. Android NDK only if we are not in artifact mode. Android packages.
# 1. This is hard to believe, but the Android SDK binaries are 32-bit
# and that conflicts with 64-bit Arch installations out of the box. The
# solution is to add the multilibs repository; unfortunately, this
# requires manual intervention.
try:
self.zypper_install(*self.MOBILE_ANDROID_COMMON_PACKAGES)
except Exception as e:
print('Failed to install all packages. The Android developer '
'toolchain requires 32 bit binaries be enabled')
raise e
# 2. Android pieces.
from mozboot import android
android.ensure_android('linux', artifact_mode=artifact_mode,
no_interactive=self.no_interactive)
def suggest_mobile_android_mozconfig(self, artifact_mode=False):
from mozboot import android
android.suggest_mozconfig('linux', artifact_mode=artifact_mode)
def suggest_mobile_android_artifact_mode_mozconfig(self):
self.suggest_mobile_android_mozconfig(artifact_mode=True)
def _update_package_manager(self):
self.zypper_update
def upgrade_mercurial(self, current):
self.run_as_root(['pip3', 'install', '--upgrade', 'pip'])
self.run_as_root(['pip3', 'install', '--upgrade', 'Mercurial'])
def ensure_nasm_packages(self, state_dir, checkout_root):
self.zypper_install('nasm')
def upgrade_python(self, current):
self.zypper_install('python3')
def zypper_install(self, *packages):
command = ['zypper', 'install']
if self.no_interactive:
command.append('-n')
command.extend(packages)
self.run_as_root(command)
def zypper_update(self, *packages):
command = ['zypper', 'update']
if self.no_interactive:
command.append('-n')
command.extend(packages)
self.run_as_root(command)
def zypper_patterninstall(self, *packages):
command = ['zypper', 'install', '-t', 'pattern']
if self.no_interactive:
command.append('-y')
command.extend(packages)
self.run_as_root(command)