Merge branch 'calamares' of https://github.com/calamares/calamares into development

This commit is contained in:
Philip Müller 2021-05-26 09:42:58 +02:00
commit dbdf5fabe7
40 changed files with 5200 additions and 331 deletions

20
.github/actions/notify-push/action.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: 'Notify on Push'
description: 'Notify Matrix room'
inputs:
room:
description: 'Matrix Room ID'
required: true
token:
description: 'Matrix Token'
required: true
message:
description: 'Message to send'
required: true
runs:
using: "composite"
steps:
- shell: bash
run: |
curl -s -XPOST -d "$( echo "${{ inputs.message }}" | jq -Rsc '{"msgtype": "m.text", "body":@text}' )" "https://matrix.org/_matrix/client/r0/rooms/%21${{ inputs.room }}/send/m.room.message?access_token=${{ inputs.token }}" > /dev/null

View File

@ -9,18 +9,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: "notify: new"
uses: rectalogic/notify-irc@v1
if: github.event.issue.state == 'open'
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-issues
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "OPENED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}"
- name: "notify: closed"
uses: rectalogic/notify-irc@v1
if: github.event.issue.state != 'open'
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-issues
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "CLOSED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}"

View File

@ -24,7 +24,7 @@ jobs:
- name: "prepare env"
run: |
apt-get update
apt-get -y install git-core
apt-get -y install git-core jq
apt-get -y install \
build-essential \
cmake \
@ -83,18 +83,16 @@ jobs:
working-directory: ${{ env.BUILDDIR }}
run: make install VERBOSE=1
- name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"
- name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"

View File

@ -24,7 +24,7 @@ jobs:
- name: "prepare env"
run: |
sudo apt-get update
sudo apt-get -y install git-core
sudo apt-get -y install git-core jq
sudo apt-get -y install \
build-essential \
cmake \
@ -82,18 +82,16 @@ jobs:
if-no-files-found: error
retention-days: 3
- name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"
- name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"

View File

@ -24,7 +24,7 @@ jobs:
- name: "prepare env"
run: |
zypper --non-interactive up
zypper --non-interactive in git-core
zypper --non-interactive in git-core jq
# From deploycala.py
zypper --non-interactive in \
"autoconf" \
@ -81,18 +81,16 @@ jobs:
working-directory: ${{ env.BUILDDIR }}
run: make install VERBOSE=1
- name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"
- name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"

View File

@ -30,7 +30,7 @@ jobs:
- name: "prepare env"
run: |
sudo apt-get update
sudo apt-get -y install git-core
sudo apt-get -y install git-core jq
sudo apt-get -y install \
build-essential \
cmake \
@ -78,18 +78,21 @@ jobs:
working-directory: ${{ env.BUILDDIR }}
run: make install VERBOSE=1
- name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ github.actor }} on ${{ github.event.ref }}\n.. ${{ steps.pre_build.outputs.message }}"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: |
OK ${{ github.workflow }} in ${{ github.repository }} by ${{ github.actor }} on ${{ github.event.ref }}
.. ${{ steps.pre_build.outputs.message }}
- name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with:
server: chat.freenode.net
nickname: cala-ci
channel: "#calamares"
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ github.actor }} on ${{ github.event.ref }}\n.. ${{ steps.pre_build.outputs.message }}\n.. DIFF ${{ github.event.compare }}"
token: ${{ secrets.MATRIX_TOKEN }}
room: ${{ secrets.MATRIX_ROOM }}
message: |
FAIL ${{ github.workflow }} in ${{ github.repository }} by ${{ github.actor }} on ${{ github.event.ref }}
.. ${{ steps.pre_build.outputs.message }}
.. ${{ github.event.compare }}

View File

@ -11,6 +11,7 @@ website will have to do for older versions.
This release contains contributions from (alphabetically by first name):
- Anubhav Choudhary (SoK success!)
- Emmanuel Arias (new contributor! welcome!)
- Erik Dubois
- Jerrod Frost (new contributor! welcome!)
- Joe Kamprad

View File

@ -34,8 +34,10 @@ Regular Calamares development chit-chat happens on old-school IRC
in Europe, but feel free to idle. **DO NOT** ask-and-leave. Keep
that chat window open because it can easily take a few hours for
someone to notice a message.
The Matrix room is relatively new.
[![Visit our IRC channel](https://kiwiirc.com/buttons/webchat.freenode.net/calamares.png)](https://webchat.freenode.net/?channel=#calamares?nick=guest)
* [![Chat on IRC](https://img.shields.io/badge/IRC-Freenode%20%23calamares-green)](https://webchat.freenode.net/?randomnick=1&channels=%23calamares)
* [![Join us on Matrix](https://img.shields.io/badge/Matrix-%23calamares:kde.org-blue)](https://webchat.kde.org/#/room/%23calamares:kde.org)
## General Guidelines

View File

@ -12,8 +12,8 @@
[![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/calamares/LICENSE)
| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [Freenode (IRC): #calamares](https://webchat.freenode.net/?channel=#calamares?nick=guest) | [Wiki](https://github.com/calamares/calamares/wiki) |
|:--:|:--:|:--:|:--:|:--:|
| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [IRC: Freenode #calamares](https://webchat.freenode.net/?channel=#calamares?nick=guest) | [Matrix: #calamares:kde.org](https://webchat.kde.org/#/room/%23calamares:kde.org) | [Wiki](https://github.com/calamares/calamares/wiki) |
|:--:|:--:|:--:|:--:|:--:|:--:|
> Calamares is a distribution-independent system installer, with an advanced partitioning
@ -29,7 +29,7 @@ a "ready to use" application: distributions apply a huge amount of customisation
and configuration to Calamares, and the target audience for this repository
is those distributions, and the people who make those Linux distro's.
Calamares has some [generic user documentation](https://github.com/calamares/calamares/wiki/Use-Guide)
Calamares has some [generic user documentation](https://calamares.io/docs/users-guide/)
for end-users, but most of what we have is for distro developers.
## Getting Calamares
@ -47,7 +47,7 @@ The dependencies are explained in [CONTRIBUTING.md](CONTRIBUTING.md).
Calamares welcomes PRs. New issues are welcome, too.
There are both the Calamares **core** repository (this one),
and an *extensions** repository ([Calamares extensions](https://github.com/calamares/calamares-extensions).
and an **extensions** repository ([Calamares extensions](https://github.com/calamares/calamares-extensions)).
Contributions to code, modules, documentation, the wiki and the website are all welcome.
There is more information in the [CONTRIBUTING.md](CONTRIBUTING.md) file.
@ -59,6 +59,7 @@ problems or a new feature to discuss.
Regular Calamares development chit-chat happens on old-school IRC
(no registration required). Responsiveness is best during the day
in Europe, but feel free to idle.
in Europe, but feel free to idle. The Matrix room is relatively new.
[![Visit our IRC channel](https://kiwiirc.com/buttons/webchat.freenode.net/calamares.png)](https://webchat.freenode.net/?channel=#calamares?nick=guest|)
* [![Chat on IRC](https://img.shields.io/badge/IRC-Freenode%20%23calamares-green)](https://webchat.freenode.net/?randomnick=1&channels=%23calamares)
* [![Join us on Matrix](https://img.shields.io/badge/Matrix-%23calamares:kde.org-blue)](https://webchat.kde.org/#/room/%23calamares:kde.org)

View File

@ -22,7 +22,7 @@ export LANG LC_ALL LC_NUMERIC
AS=$( which astyle )
CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format90 clang-format-9.0.1 clang-format"
CF_VERSIONS="clang-format-8 clang-format80 clang-format90 clang-format-9.0.1 clang-format"
for _cf in $CF_VERSIONS
do
# Not an error if this particular clang-format isn't found

52
ci/notify.sh Executable file
View File

@ -0,0 +1,52 @@
#! /bin/sh
#
# SPDX-FileCopyrightText: 2021 Adriaan de Groot <groot@kde.org>
# SPDX-License-Identifier: BSD-2-Clause
#
###
#
# Sends a notification to wherever the notifications need to be sent.
#
# Called with the following environment (for tokens / secrets):
# MATRIX_ROOM
# MATRIX_TOKEN
#
# Called with the following arguments (in order):
# - "OK" or "FAIL"
# - github.workflow
# - github.repository
# - github.actor
# - github.event.ref
# - commit-message-summary (produced in the workflow)
# - github.event.compare
#
test -z "$MATRIX_ROOM" && { echo "! No secrets" ; exit 1 ; }
test -z "$MATRIX_TOKEN" && { echo "! No secrets" ; exit 1 ; }
STATUS="$1"
WORKFLOW="$2"
REPOSITORY="$3"
ACTOR="$4"
EVENT="$5"
SUMMARY="$6"
COMPARE="$7"
test "x$STATUS" = "xOK" -o "x$STATUS" = "xFAIL" || { echo "! Invalid status" ; exit 1 ; }
test -z "$WORKFLOW" && { echo "! No event data" ; exit 1 ; }
test -z "$REPOSITORY" && { echo "! No event data" ; exit 1 ; }
test -z "$ACTOR" && { echo "! No event data" ; exit 1 ; }
test -z "$EVENT" && { echo "! No event data" ; exit 1 ; }
# It's ok for summary or the compare URL to be empty
url="https://matrix.org/_matrix/client/r0/rooms/%21${MATRIX_ROOM}/send/m.room.message?access_token=${MATRIX_TOKEN}"
message_data=$(
{
echo "${STATUS} ${WORKFLOW} in ${REPOSITORY} ${ACTOR} on ${EVENT}"
test -n "$SUMMARY" && echo ".. ${SUMMARY}"
test -n "$COMPARE" && echo ".. DIFF ${COMPARE}"
} | jq -Rs '{"msgtype": "m.text", "body":@text}' )
curl -s -XPOST -d "$message_data" "$url" > /dev/null

View File

@ -6,7 +6,7 @@
<message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source>
<translation type="unfinished"/>
<translation>Manage auto-mount settings</translation>
</message>
</context>
<context>

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
<message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source>
<translation type="unfinished"/>
<translation>ניהול הגדרות העיגון האוטומטי</translation>
</message>
</context>
<context>
@ -412,17 +412,17 @@ Link copied to clipboard</source>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/>
<source>The installation is complete. Close the installer.</source>
<translation>תהליך ההתקנה הושלם. נא לסגור את תכנית ההתקנה.</translation>
<translation>ההתקנה הושלמה. נא לסגור את אשף ההתקנה.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/>
<source>Cancel setup without changing the system.</source>
<translation>ביטול ההתקנה ללא שינוי המערכת.</translation>
<translation>ביטול ההתקנה ללא ביצוע שינוי במערכת.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/>
<source>Cancel installation without changing the system.</source>
<translation>ביטול התקנה ללא ביצוע שינוי במערכת.</translation>
<translation>ביטול ההתקנה ללא ביצוע שינוי במערכת.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="408"/>
@ -458,14 +458,14 @@ Link copied to clipboard</source>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="512"/>
<source>Do you really want to cancel the current setup process?
The setup program will quit and all changes will be lost.</source>
<translation>לבטל את תהליך ההתקנה הנוכחי?
תכנית ההתקנה תצא וכל השינויים יאבדו.</translation>
<translation>האם לבטל את תהליך ההתקנה הנוכחי?
אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/>
<source>Do you really want to cancel the current install process?
The installer will quit and all changes will be lost.</source>
<translation>האם אכן ברצונך לבטל את תהליך ההתקנה?
<translation>האם לבטל את תהליך ההתקנה הנוכחי?
אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation>
</message>
</context>
@ -893,7 +893,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/finished/Config.cpp" line="148"/>
<source>The installation of %1 did not complete successfully.</source>
<translation type="unfinished"/>
<translation>ההתקנה של %1 לא הסתיימה בהצלחה.</translation>
</message>
<message>
<location filename="../src/modules/finished/Config.cpp" line="152"/>
@ -2683,7 +2683,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="219"/>
<source>Are you sure you want to create a new partition table on %1?</source>
<translation>ליצור טבלת מחיצות חדשה על %1?</translation>
<translation>האם ליצור טבלת מחיצות חדשה על %1?</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="254"/>
@ -4012,7 +4012,7 @@ Output:
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="36"/>
<source>Installation Completed</source>
<translation type="unfinished"/>
<translation>ההתקנה הושלמה</translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="43"/>
@ -4023,12 +4023,12 @@ Output:
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="65"/>
<source>Close Installer</source>
<translation type="unfinished"/>
<translation>סגירת אשף ההתקנה</translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="71"/>
<source>Restart System</source>
<translation type="unfinished"/>
<translation>הפעלת המערכת מחדש</translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="89"/>

View File

@ -6,7 +6,7 @@
<message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source>
<translation type="unfinished"/>
<translation>Zarządzaj ustawieniami auto-montowania</translation>
</message>
</context>
<context>
@ -109,22 +109,22 @@
<message>
<location filename="../src/calamares/DebugWindow.ui" line="115"/>
<source>Reloads the stylesheet from the branding directory.</source>
<translation type="unfinished"/>
<translation>Ponownie ładuje arkusz stylów z katalogu brandingu. </translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="141"/>
<source>Uploads the session log to the configured pastebin.</source>
<translation type="unfinished"/>
<translation>Przesyła dziennik sesji do skonfigurowanego pliku na pastebin.</translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="144"/>
<source>Send Session Log</source>
<translation type="unfinished"/>
<translation>Wyślij dziennik sesji</translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="118"/>
<source>Reload Stylesheet</source>
<translation type="unfinished"/>
<translation>Przeładowuje Arkusz Stylów</translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="128"/>
@ -4253,32 +4253,33 @@ i nie uruchomi się</translation>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
<source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
&lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h3&gt;Witaj w instalatorze %1&lt;quote&gt;%2&lt;/quote&gt;&lt;/h3&gt;
&lt;p&gt;Ten program zapyta cię o kilka rzeczy i ustawi %1 na twoim komputerze.&lt;/p&gt; </translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
<source>About</source>
<translation type="unfinished"/>
<translation>O nas</translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/>
<source>Support</source>
<translation type="unfinished"/>
<translation>Wsparcie</translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/>
<source>Known issues</source>
<translation type="unfinished"/>
<translation>Znane problemy</translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/>
<source>Release notes</source>
<translation type="unfinished"/>
<translation>Informacje o wydaniu</translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/>
<source>Donate</source>
<translation type="unfinished"/>
<translation>Dotacje</translation>
</message>
</context>
</TS>

4279
lang/calamares_ru_RU.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -312,18 +312,18 @@
<location filename="../src/libcalamaresui/ViewManager.cpp" line="178"/>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="518"/>
<source>&amp;Yes</source>
<translation>no</translation>
<translation>Án&amp;o</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="179"/>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="519"/>
<source>&amp;No</source>
<translation>_Nie</translation>
<translation>&amp;Nie</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="185"/>
<source>&amp;Close</source>
<translation>_Zavrieť</translation>
<translation>&amp;Zavrieť</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/Paste.cpp" line="160"/>
@ -402,7 +402,7 @@ Link copied to clipboard</source>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/>
<source>&amp;Install</source>
<translation>_Inštalovať</translation>
<translation>&amp;Inštalovať</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="394"/>
@ -437,7 +437,7 @@ Link copied to clipboard</source>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="419"/>
<source>&amp;Done</source>
<translation>_Dokončiť</translation>
<translation>&amp;Dokončiť</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="438"/>

View File

@ -3847,7 +3847,7 @@ Installationen kan inte fortsätta.&lt;/p&gt;</translation>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
<source>&amp;About</source>
<translation>Om, &amp;A</translation>
<translation>&amp;Om</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="150"/>

View File

@ -6,7 +6,7 @@
<message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source>
<translation type="unfinished"/>
<translation> </translation>
</message>
</context>
<context>
@ -120,7 +120,7 @@
<message>
<location filename="../src/calamares/DebugWindow.ui" line="144"/>
<source>Send Session Log</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="118"/>
@ -1403,7 +1403,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="262"/>
<source>Set up %3 partition &lt;strong&gt;%1&lt;/strong&gt; with mount point &lt;strong&gt;%2&lt;/strong&gt;%4.</source>
<translation type="unfinished"/>
<translation>%3 </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="243"/>
@ -3985,29 +3985,31 @@ Output:
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="36"/>
<source>Installation Completed</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="43"/>
<source>%1 has been installed on your computer.&lt;br/&gt;
You may now restart into your new system, or continue using the Live environment.</source>
<translation type="unfinished"/>
<translation>%1 &lt;br/&gt;
使 Live </translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="65"/>
<source>Close Installer</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="71"/>
<source>Restart System</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="89"/>
<source>&lt;p&gt;A full log of the install is available as installation.log in the home directory of the Live user.&lt;br/&gt;
This log is copied to /var/log/installation.log of the target system.&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>
/var/log/installation.log</translation>
</message>
</context>
<context>

View File

@ -13,6 +13,7 @@
# Seboss666 <sebastien_verdet@seboss666.info>, 2019
# Florian B <florianb3522@gmail.com>, 2019
# Arnaud Ferraris <arnaud.ferraris@gmail.com>, 2019
# roxfr <roxfr@outlook.fr>, 2021
#
#, fuzzy
msgid ""
@ -21,7 +22,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Arnaud Ferraris <arnaud.ferraris@gmail.com>, 2019\n"
"Last-Translator: roxfr <roxfr@outlook.fr>, 2021\n"
"Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -112,11 +113,11 @@ msgstr "rsync a échoué avec le code d'erreur {}."
#: src/modules/unpackfs/main.py:300
msgid "Unpacking image {}/{}, file {}/{}"
msgstr ""
msgstr "Décompression de l'image {}/{}, fichier {}/{}"
#: src/modules/unpackfs/main.py:315
msgid "Starting to unpack {}"
msgstr ""
msgstr "Commencer à décompresser {}"
#: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464
msgid "Failed to unpack image \"{}\""
@ -146,6 +147,8 @@ msgstr "Mauvaise configuration unsquash"
#: src/modules/unpackfs/main.py:455
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr ""
"Le système de fichiers pour \"{}\" ({}) n'est pas pris en charge par votre "
"noyau actuel"
#: src/modules/unpackfs/main.py:459
msgid "The source filesystem \"{}\" does not exist"
@ -214,6 +217,8 @@ msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
"La liste des gestionnaires d'affichage est vide ou indéfinie à la fois dans "
"globalstorage et displaymanager.conf."
#: src/modules/displaymanager/main.py:977
msgid "Display manager configuration was incomplete"
@ -330,11 +335,11 @@ msgstr "Configuration de l'horloge matériel."
#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr ""
msgstr "Création d'initramfs avec mkinitfs."
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr ""
msgstr "Échec de l'exécution de mkinitfs sur la cible"
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
msgid "The exit code was {}"
@ -362,12 +367,12 @@ msgstr "Écriture du fstab."
#: src/modules/dummypython/main.py:35
msgid "Dummy python job."
msgstr "Tâche factice python"
msgstr "Tâche factice de python"
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
#: src/modules/dummypython/main.py:94
msgid "Dummy python step {}"
msgstr "Étape factice python {}"
msgstr "Étape factice de python {}"
#: src/modules/localecfg/main.py:30
msgid "Configuring locales."
@ -375,4 +380,4 @@ msgstr "Configuration des locales."
#: src/modules/networkcfg/main.py:28
msgid "Saving network configuration."
msgstr "Sauvegarde des configuration réseau."
msgstr "Sauvegarde de la configuration du réseau en cours."

View File

@ -5,7 +5,7 @@
#
# Translators:
# Eli Shleifer <eligator@gmail.com>, 2017
# Omer I.S. <omeritzicschwartz@gmail.com>, 2020
# Omeritzics Games <omeritzicschwartz@gmail.com>, 2020
# Yaron Shahrabani <sh.yaron@gmail.com>, 2020
#
#, fuzzy

View File

@ -7,6 +7,7 @@
# Pierfrancesco Passerini <p.passerini@gmail.com>, 2019
# Pietro F. Fontana, 2020
# Saverio <saverio.brancaccio@gmail.com>, 2020
# Giuseppe Pignataro <rogepix@gmail.com>, 2021
#
#, fuzzy
msgid ""
@ -15,7 +16,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Saverio <saverio.brancaccio@gmail.com>, 2020\n"
"Last-Translator: Giuseppe Pignataro <rogepix@gmail.com>, 2021\n"
"Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -209,6 +210,8 @@ msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
"L'elenco dei display manager è vuota o non definita sia in globalstorage che"
" in displaymanager.conf."
#: src/modules/displaymanager/main.py:977
msgid "Display manager configuration was incomplete"
@ -321,11 +324,11 @@ msgstr "Impostazione del clock hardware."
#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr ""
msgstr "Sto creando initramfs con mkinitfs."
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr ""
msgstr "Impossibile eseguire mkinitfs sulla destinazione"
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
msgid "The exit code was {}"

View File

@ -5,7 +5,7 @@
#
# Translators:
# Ji-Hyeon Gim <potatogim@potatogim.net>, 2018
# Bruce Lee <daemul72@gmail.com>, 2020
# Jung Hee Lee <daemul72@gmail.com>, 2020
#
#, fuzzy
msgid ""
@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Bruce Lee <daemul72@gmail.com>, 2020\n"
"Last-Translator: Jung Hee Lee <daemul72@gmail.com>, 2020\n"
"Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -5,7 +5,7 @@
#
# Translators:
# André Marcelo Alvarenga <alvarenga@kde.org>, 2020
# Guilherme, 2020
# Guilherme Marçal Silva, 2020
#
#, fuzzy
msgid ""
@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Guilherme, 2020\n"
"Last-Translator: Guilherme Marçal Silva, 2020\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -0,0 +1,351 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Language-Team: Russian (Russia) (https://www.transifex.com/calamares/teams/20061/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru_RU\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: src/modules/grubcfg/main.py:28
msgid "Configure GRUB."
msgstr ""
#: src/modules/mount/main.py:30
msgid "Mounting partitions."
msgstr ""
#: src/modules/mount/main.py:125 src/modules/initcpiocfg/main.py:198
#: src/modules/initcpiocfg/main.py:202
#: src/modules/luksopenswaphookcfg/main.py:86
#: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164
#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89
#: src/modules/openrcdmcryptcfg/main.py:72
#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355
#: src/modules/fstab/main.py:361 src/modules/localecfg/main.py:135
#: src/modules/networkcfg/main.py:39
msgid "Configuration Error"
msgstr ""
#: src/modules/mount/main.py:126 src/modules/initcpiocfg/main.py:199
#: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165
#: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/fstab/main.py:356
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/services-systemd/main.py:26
msgid "Configure systemd services"
msgstr ""
#: src/modules/services-systemd/main.py:59
#: src/modules/services-openrc/main.py:93
msgid "Cannot modify service"
msgstr ""
#: src/modules/services-systemd/main.py:60
msgid ""
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-systemd/main.py:63
#: src/modules/services-systemd/main.py:67
msgid "Cannot enable systemd service <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:65
msgid "Cannot enable systemd target <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:69
msgid "Cannot disable systemd target <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:71
msgid "Cannot mask systemd unit <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:73
msgid ""
"Unknown systemd commands <code>{command!s}</code> and "
"<code>{suffix!s}</code> for unit {name!s}."
msgstr ""
#: src/modules/umount/main.py:31
msgid "Unmount file systems."
msgstr ""
#: src/modules/unpackfs/main.py:35
msgid "Filling up filesystems."
msgstr ""
#: src/modules/unpackfs/main.py:255
msgid "rsync failed with error code {}."
msgstr ""
#: src/modules/unpackfs/main.py:300
msgid "Unpacking image {}/{}, file {}/{}"
msgstr ""
#: src/modules/unpackfs/main.py:315
msgid "Starting to unpack {}"
msgstr ""
#: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464
msgid "Failed to unpack image \"{}\""
msgstr ""
#: src/modules/unpackfs/main.py:431
msgid "No mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:432
msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
msgstr ""
#: src/modules/unpackfs/main.py:437
msgid "Bad mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:438
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
msgstr ""
#: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458
#: src/modules/unpackfs/main.py:478
msgid "Bad unsquash configuration"
msgstr ""
#: src/modules/unpackfs/main.py:455
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr ""
#: src/modules/unpackfs/main.py:459
msgid "The source filesystem \"{}\" does not exist"
msgstr ""
#: src/modules/unpackfs/main.py:465
msgid ""
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
"installed"
msgstr ""
#: src/modules/unpackfs/main.py:479
msgid "The destination \"{}\" in the target system is not a directory"
msgstr ""
#: src/modules/displaymanager/main.py:514
msgid "Cannot write KDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:515
msgid "KDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:576
msgid "Cannot write LXDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:577
msgid "LXDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:660
msgid "Cannot write LightDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:661
msgid "LightDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:735
msgid "Cannot configure LightDM"
msgstr ""
#: src/modules/displaymanager/main.py:736
msgid "No LightDM greeter installed."
msgstr ""
#: src/modules/displaymanager/main.py:767
msgid "Cannot write SLIM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:768
msgid "SLIM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:894
msgid "No display managers selected for the displaymanager module."
msgstr ""
#: src/modules/displaymanager/main.py:895
msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
#: src/modules/displaymanager/main.py:977
msgid "Display manager configuration was incomplete"
msgstr ""
#: src/modules/initcpiocfg/main.py:28
msgid "Configuring mkinitcpio."
msgstr ""
#: src/modules/initcpiocfg/main.py:203
#: src/modules/luksopenswaphookcfg/main.py:91
#: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77
#: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136
#: src/modules/networkcfg/main.py:40
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/luksopenswaphookcfg/main.py:26
msgid "Configuring encrypted swap."
msgstr ""
#: src/modules/rawfs/main.py:26
msgid "Installing data."
msgstr ""
#: src/modules/services-openrc/main.py:29
msgid "Configure OpenRC services"
msgstr ""
#: src/modules/services-openrc/main.py:57
msgid "Cannot add service {name!s} to run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:59
msgid "Cannot remove service {name!s} from run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:61
msgid ""
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
"level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:94
msgid ""
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-openrc/main.py:101
msgid "Target runlevel does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:102
msgid ""
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/services-openrc/main.py:110
msgid "Target service does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:111
msgid ""
"The path for service {name!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/plymouthcfg/main.py:27
msgid "Configure Plymouth theme"
msgstr ""
#: src/modules/packages/main.py:50 src/modules/packages/main.py:59
#: src/modules/packages/main.py:69
msgid "Install packages."
msgstr ""
#: src/modules/packages/main.py:57
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
#: src/modules/packages/main.py:62
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#: src/modules/packages/main.py:65
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#: src/modules/bootloader/main.py:43
msgid "Install bootloader."
msgstr ""
#: src/modules/hwclock/main.py:26
msgid "Setting hardware clock."
msgstr ""
#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr ""
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr ""
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
msgid "The exit code was {}"
msgstr ""
#: src/modules/dracut/main.py:27
msgid "Creating initramfs with dracut."
msgstr ""
#: src/modules/dracut/main.py:49
msgid "Failed to run dracut on the target"
msgstr ""
#: src/modules/initramfscfg/main.py:32
msgid "Configuring initramfs."
msgstr ""
#: src/modules/openrcdmcryptcfg/main.py:26
msgid "Configuring OpenRC dmcrypt service."
msgstr ""
#: src/modules/fstab/main.py:29
msgid "Writing fstab."
msgstr ""
#: src/modules/dummypython/main.py:35
msgid "Dummy python job."
msgstr ""
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
#: src/modules/dummypython/main.py:94
msgid "Dummy python step {}"
msgstr ""
#: src/modules/localecfg/main.py:30
msgid "Configuring locales."
msgstr ""
#: src/modules/networkcfg/main.py:28
msgid "Saving network configuration."
msgstr ""

View File

@ -35,7 +35,8 @@ public:
NoError = 0,
GenericError = -1,
PythonUncaughtException = 1,
InvalidConfiguration = 2
InvalidConfiguration = 2,
MissingRequirements = 3,
};
// Can't copy, but you can keep a temporary

View File

@ -474,6 +474,14 @@ def run():
libcalamares.utils.warning( "EFI system, but nothing mounted on {!s}".format(efi_system_partition) )
return None
try:
prepare_bootloader(fw_type)
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Bootloader installation error"),
_("The bootloader could not be installed. The installation command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
return None

View File

@ -197,6 +197,8 @@ desktop_environments = [
DesktopEnvironment('/usr/bin/icewm-session', 'icewm-session'),
DesktopEnvironment('/usr/bin/fvwm3', 'fvwm3'),
DesktopEnvironment('/usr/bin/sway', 'sway'),
DesktopEnvironment('/usr/bin/ukui-session', 'ukui'),
DesktopEnvironment('/usr/bin/cutefish-session', 'cutefish-xsession'),
]

View File

@ -378,9 +378,17 @@ def run():
swap_choice = None
libcalamares.job.setprogress(0.1)
mount_options = conf["mountOptions"]
mount_options = conf.get("mountOptions", {})
ssd_extra_mount_options = conf.get("ssdExtraMountOptions", {})
crypttab_options = conf.get("crypttabOptions", "luks")
# We rely on mount_options having a default; if there wasn't one,
# bail out with a meaningful error.
if not mount_options:
return (_("Configuration Error"),
_("No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use.")
.format("mountOptions", "fstab"))
generator = FstabGenerator(partitions,
root_mount_point,
mount_options,

View File

@ -59,7 +59,7 @@ def run():
continue
try:
shutil.copy(source_network, target_network)
shutil.copy(source_network, target_network, follow_symlinks=False)
except FileNotFoundError:
libcalamares.utils.debug(
"Can't copy network configuration files in "
@ -80,7 +80,7 @@ def run():
)
try:
shutil.copy(source_resolv, target_resolv)
shutil.copy(source_resolv, target_resolv, follow_symlinks=False)
except Exception as err:
libcalamares.utils.debug(
"Can't copy resolv.conf from {}: {}".format(source_resolv, err)

View File

@ -579,11 +579,27 @@ def run():
update_db = libcalamares.job.configuration.get("update_db", False)
if update_db and libcalamares.globalstorage.value("hasInternet"):
try:
pkgman.update_db()
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Package Manager error"),
_("The package manager could not prepare updates. The command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
update_system = libcalamares.job.configuration.get("update_system", False)
if update_system and libcalamares.globalstorage.value("hasInternet"):
try:
pkgman.update_system()
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Package Manager error"),
_("The package manager could not update the system. The command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
operations = libcalamares.job.configuration.get("operations", [])
if libcalamares.globalstorage.contains("packageOperations"):
@ -603,11 +619,18 @@ def run():
for entry in operations:
group_packages = 0
libcalamares.utils.debug(pretty_name())
try:
run_operations(pkgman, entry)
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Package Manager error"),
_("The package manager could make changes to the installed system. The command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
mode_packages = None
libcalamares.job.setprogress(1.0)
libcalamares.utils.debug(pretty_name())
return None

View File

@ -18,6 +18,7 @@
// KPMcore
#include <kpmcore/core/device.h>
#include <kpmcore/core/partition.h>
#include <QComboBox>
@ -148,28 +149,39 @@ BootLoaderModel::data( const QModelIndex& index, int role ) const
return QStandardItemModel::data( index, role );
}
namespace Calamares
std::pair< int, Device* >
BootLoaderModel::findBootLoader( const QString& path ) const
{
int
findBootloader( const QAbstractItemModel* model, const QString& path )
{
for ( int i = 0; i < model->rowCount(); ++i )
int r = 0;
for ( Device* d : m_devices )
{
const auto index = model->index( i, 0, QModelIndex() );
if ( !index.isValid() )
if ( d && d->deviceNode() == path )
{
continue;
}
QVariant var = model->data( index, BootLoaderModel::BootLoaderPathRole );
if ( var.isValid() && var.toString() == path )
{
return i;
return std::make_pair( r, d );
}
r++;
}
return -1;
Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, path );
if ( partition )
{
const QString partition_device_path = partition->deviceNode();
r = 0;
for ( Device* d : m_devices )
{
if ( d && d->deviceNode() == partition_device_path )
{
return std::make_pair( r, d );
}
r++;
}
}
return std::make_pair( -1, nullptr );
}
namespace Calamares
{
void
restoreSelectedBootLoader( QComboBox& combo, const QString& path )
{
@ -180,12 +192,16 @@ restoreSelectedBootLoader( QComboBox& combo, const QString& path )
return;
}
int r = -1;
if ( path.isEmpty() )
{
cDebug() << "No path to restore, choosing default";
combo.setCurrentIndex( 0 );
return;
}
else if ( ( r = findBootloader( model, path ) ) >= 0 )
const BootLoaderModel* bmodel = qobject_cast< const BootLoaderModel* >( model );
int r = bmodel ? bmodel->findBootLoader( path ).first : -1;
if ( r >= 0 )
{
combo.setCurrentIndex( r );
}

View File

@ -26,6 +26,8 @@ class BootLoaderModel : public QStandardItemModel
{
Q_OBJECT
public:
using DeviceList = QList< Device* >;
enum
{
BootLoaderPathRole = Qt::UserRole + 1,
@ -39,13 +41,19 @@ public:
* Init the model with the list of devices. Does *not* take ownership of the
* devices.
*/
void init( const QList< Device* >& devices );
void init( const DeviceList& devices );
void update();
QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
using DeviceList = QList< Device* >;
/** @brief Looks up a boot-loader by device-name @p path (e.g. /dev/sda)
*
* Returns a row number (index) in the model and a Device*: if there **is** a
* device for the given @p path, index will be in range of the model and
* Device* non-null. Returns (-1, nullptr) otherwise.
*/
std::pair< int, Device* > findBootLoader( const QString& path ) const;
private:
DeviceList m_devices;
@ -57,13 +65,6 @@ private:
namespace Calamares
{
/** @brief Returns the row number of boot-loader @p path (e.g. /dev/sda)
*
* Assuming the @p model is a BootLoaderModel, will return a row number
* in the model. Returns -1 otherwise.
*/
int findBootloader( const QAbstractItemModel* model, const QString& path );
/** @brief Tries to set @p path as selected item in @p combo
*
* Matches a boot-loader install path (e.g. /dev/sda) with a model

View File

@ -340,7 +340,7 @@ PartitionCoreModule::deviceModel() const
return m_deviceModel;
}
QAbstractItemModel*
BootLoaderModel*
PartitionCoreModule::bootLoaderModel() const
{
return m_bootLoaderModel;

View File

@ -122,7 +122,7 @@ public:
* The single BootLoaderModel instance belongs to the PCM.
* @return the BootLoaderModel.
*/
QAbstractItemModel* bootLoaderModel() const;
BootLoaderModel* bootLoaderModel() const;
void createPartitionTable( Device* device, PartitionTable::TableType type );

View File

@ -13,6 +13,7 @@
#include "gui/PartitionViewStep.h"
#include "core/BootLoaderModel.h"
#include "core/Config.h"
#include "core/DeviceModel.h"
#include "core/KPMHelpers.h"
@ -36,6 +37,7 @@
#include "utils/NamedEnum.h"
#include "utils/QtCompat.h"
#include "utils/Retranslator.h"
#include "utils/Units.h"
#include "utils/Variant.h"
#include "widgets/WaitingWidget.h"
@ -395,6 +397,44 @@ PartitionViewStep::onActivate()
}
}
static bool
shouldWarnForGPTOnBIOS( const PartitionCoreModule* core )
{
if ( PartUtils::isEfiSystem() )
{
return false;
}
auto [ r, device ] = core->bootLoaderModel()->findBootLoader( core->bootLoaderInstallPath() );
if ( device )
{
auto* table = device->partitionTable();
cDebug() << "Found device for bootloader" << device->deviceNode();
if ( table && table->type() == PartitionTable::TableType::gpt )
{
// So this is a BIOS system, and the bootloader will be installed on a GPT system
for ( const auto& partition : qAsConst( table->children() ) )
{
using CalamaresUtils::Units::operator""_MiB;
if ( ( partition->activeFlags() & PartitionTable::Flag::BiosGrub )
&& ( partition->fileSystem().type() == FileSystem::Unformatted )
&& ( partition->capacity() >= 8_MiB ) )
{
cDebug() << Logger::SubEntry << "Partition" << partition->devicePath()
<< partition->partitionPath()
<< "is a suitable bios_grub partition";
return false;
}
}
}
cDebug() << Logger::SubEntry << "No suitable partition for bios_grub found";
}
else
{
cDebug() << "Found no device for" << core->bootLoaderInstallPath();
}
return true;
}
void
PartitionViewStep::onLeave()
@ -462,9 +502,9 @@ PartitionViewStep::onLeave()
{
cDebug() << "device: BIOS";
// TODO: this *always* warns, which might be annoying, so it'd be
// best to find a way to detect that bios_grub partition.
if ( shouldWarnForGPTOnBIOS( m_core ) )
{
QString message = tr( "Option to use GPT on BIOS" );
QString description = tr( "A GPT partition table is the best option for all "
"systems. This installer supports such a setup for "
@ -481,6 +521,7 @@ PartitionViewStep::onLeave()
QMessageBox::information( m_manualPartitionPage, message, description );
}
}
Partition* root_p = m_core->findPartitionByMountPoint( "/" );
Partition* boot_p = m_core->findPartitionByMountPoint( "/boot" );
@ -593,7 +634,7 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
// because it could take a while. Then when it's done, we can set up the widgets
// and remove the spinner.
m_future = new QFutureWatcher< void >();
connect( m_future, &QFutureWatcher< void >::finished, this, [this] {
connect( m_future, &QFutureWatcher< void >::finished, this, [ this ] {
continueLoading();
this->m_future->deleteLater();
this->m_future = nullptr;

View File

@ -44,6 +44,7 @@ SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent )
layout->setContentsMargins( 0, 0, 0, 0 );
QLabel* headerLabel = new QLabel( this );
headerLabel->setObjectName( "summaryTitle" );
CALAMARES_RETRANSLATE( if ( Calamares::Settings::instance()->isSetupMode() )
headerLabel->setText( tr( "This is an overview of what will happen once you start "
"the setup procedure." ) );
@ -169,6 +170,7 @@ QLabel*
SummaryPage::createTitleLabel( const QString& text ) const
{
QLabel* label = new QLabel( text );
label->setObjectName( "summaryItemTitle" );
QFont fnt = font();
fnt.setWeight( QFont::Light );
fnt.setPointSize( CalamaresUtils::defaultFontSize() * 2 );
@ -182,6 +184,7 @@ QLabel*
SummaryPage::createBodyLabel( const QString& text ) const
{
QLabel* label = new QLabel;
label->setObjectName( "summaryItemBody" );
label->setMargin( CalamaresUtils::defaultFontHeight() / 2 );
QPalette pal( palette() );
pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) );

View File

@ -64,6 +64,7 @@ CheckerContainer::requirementsComplete( bool ok )
m_waitingWidget = nullptr; // Don't delete in destructor
m_checkerWidget = new ResultsListWidget( m_model, this );
m_checkerWidget->setObjectName( "requirementsChecker" );
layout()->addWidget( m_checkerWidget );
m_verdict = ok;

View File

@ -29,11 +29,14 @@ ResultWidget::ResultWidget( bool satisfied, bool required, QWidget* parent )
setLayout( mainLayout );
m_iconLabel = new QLabel( this );
mainLayout->addWidget( m_iconLabel );
m_iconLabel->setFixedSize( CalamaresUtils::defaultIconSize() );
m_iconLabel->setObjectName( "resultIcon" );
mainLayout->addWidget( m_iconLabel );
m_textLabel = new QLabel( this );
mainLayout->addWidget( m_textLabel );
m_textLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
m_textLabel->setObjectName( "resultText" );
mainLayout->addWidget( m_textLabel );
if ( satisfied )
{

View File

@ -52,9 +52,12 @@ createResultWidgets( QLayout* layout,
continue;
}
const QString checkName = model.data( index, Calamares::RequirementsModel::Name ).toString();
const bool is_satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool();
const bool is_mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool();
ResultWidget* ciw = new ResultWidget( is_satisfied, is_mandatory );
ciw->setObjectName( checkName );
layout->addWidget( ciw );
ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
@ -105,6 +108,7 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
auto* entriesLayout = new QVBoxLayout;
m_title = new QLabel( this );
m_title->setObjectName( "resultDialogTitle" );
createResultWidgets(
entriesLayout, m_resultWidgets, model, []( const Calamares::RequirementsModel& m, QModelIndex i ) {
@ -112,6 +116,7 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
} );
QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close, Qt::Horizontal, this );
buttonBox->setObjectName( "resultDialogButtons" );
mainLayout->addWidget( m_title );
mainLayout->addLayout( entriesLayout );
@ -168,6 +173,7 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel& model,
m_explanation->setWordWrap( true );
m_explanation->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
m_explanation->setOpenExternalLinks( false );
m_explanation->setObjectName( "resultsExplanation" );
connect( m_explanation, &QLabel::linkActivated, this, &ResultsListWidget::linkClicked );
entriesLayout->addWidget( m_explanation );
@ -208,9 +214,10 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel& model,
}
imageLabel->setContentsMargins( 4, CalamaresUtils::defaultFontHeight() * 3 / 4, 4, 4 );
mainLayout->addWidget( imageLabel );
imageLabel->setAlignment( Qt::AlignCenter );
imageLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
imageLabel->setObjectName( "welcomeLogo" );
mainLayout->addWidget( imageLabel );
}
}
m_explanation->setAlignment( Qt::AlignCenter );