...
 
Commits (8)
/* Allow Calamares to be started without password authentication
*/
polkit.addRule(function(action, subject) {
if ((action.id == "com.github.calamares.calamares.pkexec.run"))
{
return polkit.Result.YES;
}
});
[Desktop Entry]
Type=Application
Version=1.0
Name=Install Manjaro Linux
GenericName=Live Installer
Comment=Install the operating system to disk
Comment[de]=Manjaro Linux installieren
Exec=/usr/bin/calamares_polkit %f
Icon=calamares
Terminal=false
StartupNotify=true
Type=Application
Categories=Qt;System;
#!/bin/bash
if [ $(which pkexec) ]; then
pkexec --disable-internal-agent "/usr/bin/calamares" "$@"
else
/usr/bin/calamares "$@"
fi
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3505"
version="1.1"
inkscape:version="0.91 r13725"
width="512"
height="512"
viewBox="0 0 512 512"
sodipodi:docname="manjaro-icon.svg">
<metadata
id="metadata3511">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3509" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="998"
id="namedview3507"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3505" />
<image
width="512"
height="512"
preserveAspectRatio="none"
style="image-rendering:optimizeQuality"
xlink:href="data:image/png;base64,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
AAAAAM78f6ZMXPE9Xy/GAAAAAElFTkSuQmCC
"
id="image3513"
x="0"
y="0" />
</svg>
......@@ -30,7 +30,6 @@ modules-search: [ local ]
# For more information on running module instances, run Calamares in debug mode
# and check the Modules page in the Debug information interface.
# YAML: list of maps of string:string key-value pairs.
#instances:
#- id: owncloud
# module: webview
......@@ -59,46 +58,39 @@ modules-search: [ local ]
# instances are lifted.
# YAML: list of lists of strings.
sequence:
- show:
- welcome
# - dummypythonqt
- locale
- keyboard
- partition
- users
- summary
- exec:
# - dummycpp
# - dummyprocess
# - dummypython
# - dummypythonqt
- partition
- mount
- unpackfs
- machineid
- fstab
- locale
- keyboard
- localecfg
# - luksbootkeyfile
# - luksopenswaphookcfg
# - dracutlukscfg
# - plymouthcfg
- initcpiocfg
- initcpio
- users
- displaymanager
- networkcfg
- hwclock
- services
# - dracut
- initramfs
# - grubcfg
- bootloader
- umount
- show:
# - webview@owncloud
- finished
- show:
- welcome
- locale
- keyboard
- partition
- users
- summary
- exec:
- partition
- mount
- unpackfs
- machineid
- fstab
- locale
- keyboard
- localecfg
- luksopenswaphookcfg
- luksbootkeyfile
- plymouthcfg
- initcpiocfg
- initcpio
- users
- displaymanager
- mhwdcfg
- networkcfg
- hwclock
- services
- grubcfg
- bootloader
- postcfg
- umount
- show:
- finished
# A branding component is a directory, either in SHARE/calamares/branding or in
# /etc/calamares/branding (the latter takes precedence). The directory must contain a
......@@ -109,7 +101,7 @@ sequence:
# Only the name of the branding component (directory) should be specified here, Calamares
# then takes care of finding it and loading the contents.
# YAML: string.
branding: default
branding: manjaro
# If this is set to true, Calamares will show an "Are you sure?" prompt right before
# each execution phase, i.e. at points of no return. If this is set to false, no prompt
......
---
componentName: manjaro-kde
strings:
productName: Manjaro Linux
shortProductName: Manjaro
version: 17.0
shortVersion: 17.0
versionedName: Manjaro Linux 17.0 "Gellivara"
shortVersionedName: Manjaro 17.0
bootloaderEntryName: Manjaro
images:
productLogo: "squid.png"
productIcon: "logo.png"
productWelcome: "languages.png"
slideshow: "show.qml"
style:
sidebarBackground: "#292F34"
sidebarText: "#FFFFFF"
sidebarTextSelect: "#292F34"
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.0;
import calamares.slideshow 1.0;
Presentation
{
id: presentation
Timer {
interval: 20000
running: true
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {
id: background1
source: "slide1.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background1.horizontalCenter
anchors.top: background1.bottom
text: "Welcome to Manjaro.<br/>"+
"Manjaro is driven by a hardworking and dedicated community.<br/>"+
"During the installation, this slideshow will provide a quick introduction."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background2
source: "slide2.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background2.horizontalCenter
anchors.top: background2.bottom
text: "All of Manjaro's versions are completely customizable<br/>"+
"to exactly how you want it. From theming, to the very<br/>"+
"kernel itself, it can be changed."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background3
source: "slide3.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background3.horizontalCenter
anchors.top: background3.bottom
text: "Manjaro has three different officially supported editions.<br/>"+
"Additionally, there are a multitude of community editions<br/>"+
"to choose from, built by the community, for the community."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background4
source: "slide4.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background4.horizontalCenter
anchors.top: background4.bottom
text: "Manjaro has three different options for managing<br/>"+
"packages. The original command line option, Pacman<br/>"+
"and two different GUI options: Octopi or Pamac."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background5
source: "slide5.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background5.horizontalCenter
anchors.top: background5.bottom
text: "We appreciate you choosing Manjaro, and hope you enjoy<br/>"+
"it as much as we do making it! If you have any questions<br/>"+
"or feedback, please feel free to visit the forum, IRC, or wiki."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
}
---
componentName: manjaro-xfce
strings:
productName: Manjaro Linux
shortProductName: Manjaro
version: 17.0
shortVersion: 17.0
versionedName: Manjaro Linux 17.0 "Gellivara"
shortVersionedName: Manjaro 17.0
bootloaderEntryName: Manjaro
images:
productLogo: "squid.png"
productIcon: "logo.png"
productWelcome: "languages.png"
slideshow: "show.qml"
style:
sidebarBackground: "#292F34"
sidebarText: "#FFFFFF"
sidebarTextSelect: "#292F34"
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.0;
import calamares.slideshow 1.0;
Presentation
{
id: presentation
Timer {
interval: 20000
running: true
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {
id: background1
source: "slide1.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background1.horizontalCenter
anchors.top: background1.bottom
text: "Welcome to Manjaro.<br/>"+
"Manjaro is driven by a hardworking and dedicated community.<br/>"+
"During the installation, this slideshow will provide a quick introduction."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background2
source: "slide2.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background2.horizontalCenter
anchors.top: background2.bottom
text: "All of Manjaro's versions are completely customizable<br/>"+
"to exactly how you want it. From theming, to the very<br/>"+
"kernel itself, it can be changed."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background3
source: "slide3.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background3.horizontalCenter
anchors.top: background3.bottom
text: "Manjaro has three different officially supported editions.<br/>"+
"Additionally, there are a multitude of community editions<br/>"+
"to choose from, built by the community, for the community."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background4
source: "slide4.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background4.horizontalCenter
anchors.top: background4.bottom
text: "Manjaro has three different options for managing<br/>"+
"packages. The original command line option, Pacman<br/>"+
"and two different GUI options: Octopi or Pamac."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background5
source: "slide5.png"
width: 467; height: 280
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background5.horizontalCenter
anchors.top: background5.bottom
text: "We appreciate you choosing Manjaro, and hope you enjoy<br/>"+
"it as much as we do making it! If you have any questions<br/>"+
"or feedback, please feel free to visit the forum, IRC, or wiki."
wrapMode: Text.WordWrap
width: 600
horizontalAlignment: Text.Center
}
}
}
---
componentName: manjaro
strings:
productName: Manjaro Linux
shortProductName: Manjaro
version: 17.0
shortVersion: 17.0
versionedName: Manjaro Linux 17.0 "Gellivara"
shortVersionedName: Manjaro 17.0
bootloaderEntryName: Manjaro
images:
productLogo: "squid.png"
productIcon: "logo.png"
productWelcome: "languages.png"
slideshow: "show.qml"
style:
sidebarBackground: "#292F34"
sidebarText: "#FFFFFF"
sidebarTextSelect: "#292F34"
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Slides images dimensions are 800x440px.
*/
import QtQuick 2.0;
import calamares.slideshow 1.0;
Presentation
{
id: presentation
Timer {
interval: 20000
running: true
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {
id: background1
source: "slide1.png"
width: 800; height: 440
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background1.horizontalCenter
anchors.top: background1.bottom
text: ""
wrapMode: Text.WordWrap
width: 800
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background2
source: "slide2.png"
width: 800; height: 440
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background2.horizontalCenter
anchors.top: background2.bottom
text: ""
wrapMode: Text.WordWrap
width: 800
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background3
source: "slide3.png"
width: 800; height: 440
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background3.horizontalCenter
anchors.top: background3.bottom
text: ""
wrapMode: Text.WordWrap
width: 800
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background4
source: "slide4.png"
width: 800; height: 440
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background4.horizontalCenter
anchors.top: background4.bottom
text: ""
wrapMode: Text.WordWrap
width: 800
horizontalAlignment: Text.Center
}
}
Slide {
Image {
id: background5
source: "slide5.png"
width: 800; height: 440
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Text {
anchors.horizontalCenter: background5.horizontalCenter
anchors.top: background5.bottom
text: ""
wrapMode: Text.WordWrap
width: 800
horizontalAlignment: Text.Center
}
}
}
......@@ -5,15 +5,15 @@ efiBootLoader: "grub"
# systemd-boot configuration files settings, set kernel and initramfs file names
# and amount of time before default selection boots
kernel: "/vmlinuz-linux"
img: "/initramfs-linux.img"
fallback: "/initramfs-linux-fallback.img"
kernel: "_ALL_kver_"
img: "_default_image_"
fallback: "_fallback_image_"
timeout: "10"
# Optionally set the menu entry name and kernel name to use in systemd-boot.
# If not specified here, these settings will be taken from branding.desc.
# bootloaderEntryName: "Generic GNU/Linux"
# kernelLine: ", with Stable-Kernel"
# fallbackKernelLine: ", with Stable-Kernel (fallback initramfs)"
# bootloaderEntryName: "Manjaro"
kernelLine: ", with _manjaro_kernel_"
fallbackKernelLine: ", with _manjaro_kernel_ (fallback initramfs)"
# GRUB 2 binary names and boot directory
# Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names.
......
......@@ -9,7 +9,7 @@
# Copyright 2014, Benjamin Vaudour <benjamin.vaudour@yahoo.fr>
# Copyright 2014, Kevin Kofler <kevin.kofler@chello.at>
# Copyright 2015, Philip Mueller <philm@manjaro.org>
# Copyright 2016, Teo Mrnjavac <teo@kde.org>
# Copyright 2016-2017, Teo Mrnjavac <teo@kde.org>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
......@@ -294,6 +294,18 @@ def run():
if libcalamares.globalstorage.value("bootLoader") is None and fw_type != "efi":
return None
partitions = libcalamares.globalstorage.value("partitions")
if fw_type == "efi":
esp_found = False
for partition in partitions:
if partition["mountPoint"] == libcalamares.globalstorage.value("efiSystemPartition"):
esp_found = True
if not esp_found:
return None
prepare_bootloader(fw_type)
return None
---
requirements:
- name: /etc
mode: "0o755"
- name: /var/cache/pacman/pkg
mode: "0o755"
- name: /var/lib/pacman
mode: "0o755"
keyrings:
- archlinux
- manjaro
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# === This file is part of Calamares - <http://github.com/calamares> ===
#
# Copyright 2016, Artoo <artoo@manjaro.org>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Calamares is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Calamares. If not, see <http://www.gnu.org/licenses/>.
import os, shutil, subprocess, sys, re
import libcalamares
from libcalamares.utils import check_target_env_call, target_env_call, debug
from os.path import join
class OperationTracker:
def __init__(self):
self._downloaded = 0
self._installed = 0
self._total = 0
self._progress = float(0)
@property
def downloaded(self):
return self._downloaded
@downloaded.setter
def downloaded(self, value):
self._downloaded = value
@property
def installed(self):
return self._installed
@installed.setter
def installed(self, value):
self._installed = value
@property
def total(self):
return self._total
@total.setter
def total(self, value):
self._total = value
@property
def progress(self):
return self._progress
@progress.setter
def progress(self, value):
self._progress = value
def send_progress(self, counter, phase):
for p in range(phase):
if self.total == 0:
continue
step = 0.05
step += 0.95 * (counter / float(self.total))
self.progress += step / self.total
debug("Progress: {}".format(self.progress))
libcalamares.job.setprogress(self.progress)
ON_POSIX = 'posix' in sys.builtin_module_names
class PacmanController:
def __init__(self, root):
self.__root = root
self.__operations = libcalamares.globalstorage.value("packageOperations")
self.__tracker = OperationTracker()
self.__keyrings = libcalamares.job.configuration.get('keyrings', [])
@property
def tracker(self):
return self.__tracker
@property
def root(self):
return self.__root
@property
def operations(self):
return self.__operations
@property
def keyrings(self):
return self.__keyrings
def init_keyring(self):
target_env_call(["pacman-key", "--init"])
def populate_keyring(self):
target_env_call(["pacman-key", "--populate"] + self.keyrings)
def rank_mirrors(self):
check_target_env_call(["pacman-mirrors", "-g", "-m", "rank"])
def parse_output(self, cmd):
cal_env = os.environ
cal_env["LC_ALL"] = "C"
last = []
phase = 0
process = subprocess.Popen(cmd, env=cal_env, bufsize=1, stdout=subprocess.PIPE, close_fds=ON_POSIX)
for line in iter(process.stdout.readline, b''):
pkgs = re.findall(r'\((\d+)\)', line.decode())
dl = re.findall(r'downloading\s+(.*).pkg.tar.xz', line.decode())
inst = re.findall(r'installing(.*)\.\.\.', line.decode())
if pkgs:
self.tracker.total = (int(pkgs[0]))
debug("Number of packages: {}".format(self.tracker.total))
if dl:
if dl != last:
self.tracker.downloaded += 1
phase = 1
debug("Downloading: {}".format(dl[0]))
debug("Downloaded packages: {}".format(self.tracker.downloaded))
self.tracker.send_progress(self.tracker.downloaded, phase)
last = dl
elif inst:
self.tracker.installed += 1
phase = 2
debug("Installing: {}".format(inst[0]))
debug("Installed packages: {}".format(self.tracker.installed))
self.tracker.send_progress(self.tracker.installed, phase)
if process.returncode != 0:
return process.kill()
return None
def install(self, local=False):
cachedir = join(self.root, "var/cache/pacman/pkg")
dbdir = join(self.root, "var/lib/pacman")
args = ["pacman", "--noconfirm"]
if local:
args.extend(["-U"])
else:
args.extend(["-Sy"])
args.extend(["--cachedir", cachedir, "--root", self.root, "--dbpath", dbdir])
cmd = args + self.operations["install"]
self.parse_output(cmd)
def remove(self):
args = ["chroot", self.root, "pacman", "-Rs", "--noconfirm"]
cmd = args + self.operations["remove"]
check_target_env_call(cmd)
def run(self, rank=False):
for op in self.operations.keys():
if op == "install":
self.install()
elif op == "localInstall":
self.install(local=True)
elif op == "remove":
self.tracker.total(len(self.operations["remove"]))
self.remove()
self.init_keyring()
self.populate_keyring()
if rank:
self.rank_mirrors()
return None
class ChrootController:
def __init__(self):
self.__root = libcalamares.globalstorage.value('rootMountPoint')
self.__requirements = libcalamares.job.configuration.get('requirements', [])
@property
def root(self):
return self.__root
@property
def requirements(self):
return self.__requirements
def make_dirs(self):
for target in self.requirements:
dest = self.root + target["name"]
if not os.path.exists(dest):
debug("Create: {}".format(dest))
mod = int(target["mode"],8)
debug("Mode: {}".format(oct(mod)))
os.makedirs(dest, mode=mod)
def copy_file(self, file):
if os.path.exists(os.path.join("/",file)):
shutil.copy2(os.path.join("/",file), os.path.join(self.root, file))
def prepare(self):
cal_umask = os.umask(0)
self.make_dirs()
path = join(self.root, "run")
#debug("Fix permissions: {}".format(path))
os.chmod(path, 0o755)
os.umask(cal_umask)
self.copy_file('etc/pacman-mirrors.conf')
self.copy_file('etc/resolv.conf')
def run(self):
self.prepare()
pacman = PacmanController(self.root)
return pacman.run(rank=False)
def run():
""" Create chroot dirs and install pacman, kernel and netinstall selection """
targetRoot = ChrootController()
return targetRoot.run()
# Syntax is YAML 1.2
---
type: "job"
name: "chrootcfg"
interface: "python"
script: "main.py" #assumed relative to the current directory
......@@ -32,6 +32,8 @@ DesktopEnvironment = collections.namedtuple('DesktopEnvironment', ['executable',
desktop_environments = [
DesktopEnvironment('/usr/bin/startkde', 'plasma'), # KDE Plasma 5
DesktopEnvironment('/usr/bin/startkde', 'kde-plasma'), # KDE Plasma 4
DesktopEnvironment('/usr/bin/budgie-desktop', 'budgie-desktop'), # Budgie v10.x
DesktopEnvironment('/usr/bin/budgie-session', 'budgie-desktop'), # Budgie v8.x
DesktopEnvironment('/usr/bin/gnome-session', 'gnome'),
DesktopEnvironment('/usr/bin/startxfce4', 'xfce'),
DesktopEnvironment('/usr/bin/cinnamon-session-cinnamon', 'cinnamon'),
......@@ -42,8 +44,6 @@ desktop_environments = [
DesktopEnvironment('/usr/bin/lxqt-session', 'lxqt'),
DesktopEnvironment('/usr/bin/pekwm', 'pekwm'),
DesktopEnvironment('/usr/bin/pantheon-session', 'pantheon'),
DesktopEnvironment('/usr/bin/budgie-session', 'budgie-session'),
DesktopEnvironment('/usr/bin/budgie-desktop', 'budgie-desktop'),
DesktopEnvironment('/usr/bin/i3', 'i3'),
DesktopEnvironment('/usr/bin/startdde', 'deepin'),
DesktopEnvironment('/usr/bin/openbox-session', 'openbox')
......
......@@ -4,7 +4,7 @@
# === This file is part of Calamares - <http://github.com/calamares> ===
#
# Copyright 2014-2015, Philip Müller <philm@manjaro.org>
# Copyright 2015, Teo Mrnjavac <teo@kde.org>
# Copyright 2015-2017, Teo Mrnjavac <teo@kde.org>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
......@@ -23,6 +23,7 @@ import libcalamares
import os
import re
def modify_grub_default(partitions, root_mount_point, distributor):
""" Configures '/etc/default/grub' for hibernation and plymouth.
......@@ -65,7 +66,7 @@ def modify_grub_default(partitions, root_mount_point, distributor):
"cryptdevice=UUID={!s}:{!s}".format(partition["luksUuid"],
partition["luksMapperName"]),
"root=/dev/mapper/{!s}".format(partition["luksMapperName"])
]
]
kernel_params = ["quiet"]
......@@ -162,10 +163,24 @@ def run():
:return:
"""
if libcalamares.globalstorage.value("bootLoader") is None:
fw_type = libcalamares.globalstorage.value("firmwareType")
if libcalamares.globalstorage.value("bootLoader") is None and fw_type != "efi":
return None
partitions = libcalamares.globalstorage.value("partitions")
if fw_type == "efi":
esp_found = False
for partition in partitions:
if partition["mountPoint"] == libcalamares.globalstorage.value("efiSystemPartition"):
esp_found = True
if not esp_found:
return None
root_mount_point = libcalamares.globalstorage.value("rootMountPoint")
branding = libcalamares.globalstorage.value("branding")
distributor = branding["bootloaderEntryName"]
......
---
kernel: linux312
kernel: _kernel_
---
region: "America"
zone: "New_York"
region: "America"
zone: "New_York"
# GeoIP settings. Leave commented out to disable GeoIP.
#localeGenPath: "/etc/locale.gen"
#geoipUrl: "freegeoip.net"
localeGenPath: "/etc/locale.gen"
geoipUrl: "freegeoip.net"
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# === This file is part of Calamares - <http://github.com/calamares> ===
#
# Copyright 2016, Artoo <artoo@manjaro.org>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Calamares is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Calamares. If not, see <http://www.gnu.org/licenses/>.
import libcalamares
from libcalamares.utils import target_env_call, debug
from os.path import join
from subprocess import call
class MhwdController:
def __init__(self):
self.__root = libcalamares.globalstorage.value( "rootMountPoint" )
self.__bus = libcalamares.job.configuration.get('bus', [])
self.__identifier = libcalamares.job.configuration.get('identifier', [])
self.__local = libcalamares.job.configuration['local']
self.__repo = libcalamares.job.configuration['repo']
self._driver = libcalamares.job.configuration['driver']
@property
def driver(self):
return self._driver
@driver.setter
def driver(self, value):
self._driver = value
@property
def root(self):
return self.__root
@property
def local(self):
return self.__local
@property
def repo(self):
return self.__repo
@property
def identifier(self):
return self.__identifier
@property
def bus(self):
return self.__bus
def umount(self, mp):
call(["umount", "-l", join(self.root, mp)])
def mount(self, mp):
call(["mount", "-Br", "/" + mp, join(self.root, mp)])
def configure(self, name, id):
cmd = ["mhwd", "-a", str(name), str(self.driver), str(id).zfill(4)]
if self.local:
self.mount("opt")
cmd.extend(["--pmconfig", self.repo])
self.mount("etc/resolv.conf")
target_env_call(cmd)
if self.local:
self.umount("opt")
self.umount("etc/resolv.conf")
def run(self):
for b in self.bus:
for id in self.identifier['net']:
self.configure(b, id)
for id in self.identifier['video']:
self.configure(b, id)
return None
def run():
""" Configure the hardware """
mhwd = MhwdController()
return mhwd.run()
---
bus:
- pci
# - usb
identifier:
net:
- 200
- 280
video:
- 300
- 302
- 380
driver: free
local: true
repo: /opt/pacman-mhwd.conf
# Syntax is YAML 1.2
---
type: "job"
name: "mhwdcfg"
interface: "python"
script: "main.py" #assumed relative to the current directory
......@@ -16,11 +16,11 @@ The *netinstall.conf* file should have this format:
The URL must point to a YAML file. Here is a short example of how the YAML file should look.
- name: "Group name"
description: "Description of the group"
packages:
- lsb-release
- avahi
- grub
description: "Description of the group"
packages:
- lsb-release
- avahi
- grub
- name: "Second group name"
...
......@@ -37,6 +37,12 @@ More keys are supported:
- subgroups: if present this follows the same structure as the top level
of the YAML file, allowing there to be sub-groups of packages to an
arbitary depth
- pre-install: an optional command to run within the new system before
the group's packages are installed. It will run before each package in
the group is installed.
- post-install: an optional command to run within the new system after
the group's packages are installed. It will run after each package in
the group is installed.
If you set both *hidden* and *selected* for a group, you are basically creating a "default" group of packages
which will always be installed in the user's system.
......
......@@ -112,7 +112,7 @@ class PackageManager:
def run(self, script):
if script != "":
check_target_env_call(scrtip.split(" "))
check_target_env_call(script.split(" "))
def subst_locale(list):
......@@ -138,13 +138,13 @@ def run_operations(pkgman, entry):
for key in entry.keys():
entry[key] = subst_locale(entry[key])
if key == "install":
if isinstance(package, str):
pkgman.install(entry[key])
else:
if isinstance(entry[key], list):
for package in entry[key]:
pkgman.run(package["pre-script"])
pkgman.install([package["package"]])
pkgman.run(package["post-script"])
else:
pkgman.install(entry[key])
elif key == "try_install":
# we make a separate package manager call for each package so a single
# failing package won't stop all of them
......
rootMountPoint: /tmp/mount
packageOperations:
- install:
- vi
- pre-script: touch /tmp/foo
package: vi
post-script: rm /tmp/foo
- wget
- remove:
- vi
- wget
......@@ -100,13 +100,13 @@ swapSuggestion( const qint64 availableSpaceB )
void
doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPassphrase )
{
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
bool isEfi = false;
if ( QDir( "/sys/firmware/efi/efivars" ).exists() )
isEfi = true;
QString defaultFsType = Calamares::JobQueue::instance()->
globalStorage()->
value( "defaultFileSystemType" ).toString();
QString defaultFsType = gs->value( "defaultFileSystemType" ).toString();
if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown )
defaultFsType = "ext4";
......@@ -144,9 +144,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
PartitionTable::FlagEsp
);
PartitionInfo::setFormat( efiPartition, true );
PartitionInfo::setMountPoint( efiPartition, Calamares::JobQueue::instance()
->globalStorage()
->value( "efiSystemPartition" )
PartitionInfo::setMountPoint( efiPartition, gs->value( "efiSystemPartition" )
.toString() );
core->createPartition( dev, efiPartition, PartitionTable::FlagEsp | PartitionTable::FlagBoot );
firstFreeSector = lastSector + 1;
......@@ -156,17 +154,21 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
core->createPartitionTable( dev, PartitionTable::msdos );
}
const bool mayCreateSwap = !gs->value( "neverCreateSwap" ).toBool();
bool shouldCreateSwap = false;
qint64 availableSpaceB = ( dev->totalLogical() - firstFreeSector ) * dev->logicalSize();
qint64 suggestedSwapSizeB = swapSuggestion( availableSpaceB );
qint64 requiredSpaceB =
( Calamares::JobQueue::instance()->
globalStorage()->