diff --git a/CMakeLists.txt b/CMakeLists.txt
index c33ad8e6f..32cd8ab3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,7 +49,7 @@ option( WITH_KF5Crash "Enable crash reporting with KCrash." ON )
set( CALAMARES_ORGANIZATION_NAME "Calamares" )
set( CALAMARES_ORGANIZATION_DOMAIN "github.com/calamares" )
set( CALAMARES_APPLICATION_NAME "Calamares" )
-set( CALAMARES_DESCRIPTION_SUMMARY
+set( CALAMARES_DESCRIPTION_SUMMARY
"The distribution-independent installer framework" )
set( CALAMARES_VERSION_MAJOR 3 )
@@ -86,17 +86,17 @@ set( _tx_complete da pt_PT ro tr_TR zh_TW zh_CN pt_BR fr hr ca lt id cs_CZ )
set( _tx_good sq es pl ja sk it_IT hu ru he de nl bg uk )
set( _tx_ok ast is ar sv el es_MX gl en_GB th fi_FI hi eu sr nb
sl sr@latin mr es_PR kk kn et be )
-set( _tx_bad uz lo ur gu fr_CH fa eo )
+set( _tx_bad uz lo ur gu fr_CH fa eo ko )
### Required versions
#
# See DEPENDENCIES section below.
-set( QT_VERSION 5.6.0 )
+set( QT_VERSION 5.7.0 )
set( YAMLCPP_VERSION 0.5.1 )
set( ECM_VERSION 5.18 )
set( PYTHONLIBS_VERSION 3.3 )
-set( BOOSTPYTHON_VERSION 1.54.0 )
+set( BOOSTPYTHON_VERSION 1.55.0 )
### CMAKE SETUP
diff --git a/CMakeModules/CalamaresAddPlugin.cmake b/CMakeModules/CalamaresAddPlugin.cmake
index e02102829..d2f878381 100644
--- a/CMakeModules/CalamaresAddPlugin.cmake
+++ b/CMakeModules/CalamaresAddPlugin.cmake
@@ -38,6 +38,7 @@
# RESOURCES resource-file
# [NO_INSTALL]
# [SHARED_LIB]
+# [EMERGENCY]
# )
include( CMakeParseArguments )
@@ -47,7 +48,7 @@ include( CMakeColors )
function( calamares_add_plugin )
# parse arguments ( name needs to be saved before passing ARGN into the macro )
set( NAME ${ARGV0} )
- set( options NO_INSTALL SHARED_LIB )
+ set( options NO_INSTALL SHARED_LIB EMERGENCY )
set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES )
set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS )
cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
@@ -71,7 +72,7 @@ function( calamares_add_plugin )
# message( " ${Green}NO_INSTALL:${ColorReset} ${PLUGIN_NO_INSTALL}" )
message( " ${Green}PLUGIN_DESTINATION:${ColorReset} ${PLUGIN_DESTINATION}" )
if( PLUGIN_CONFIG_FILES )
- if ( INSTALL_CONFIG )
+ if ( INSTALL_CONFIG AND NOT PLUGIN_NO_INSTALL )
message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => ${PLUGIN_DATA_DESTINATION}" )
else()
message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => [Skipping installation]" )
@@ -92,7 +93,7 @@ function( calamares_add_plugin )
set( target_type "SHARED" )
endif()
- list( APPEND calamares_add_library_args
+ set( calamares_add_library_args
"${target}"
"EXPORT_MACRO" "${PLUGIN_EXPORT_MACRO}"
"TARGET_TYPE" "${target_type}"
@@ -115,9 +116,14 @@ function( calamares_add_plugin )
list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} )
endif()
- list( APPEND calamares_add_library_args "NO_VERSION" )
+ if ( PLUGIN_NO_INSTALL )
+ list( APPEND calamares_add_library_args "NO_INSTALL" )
+ endif()
- list( APPEND calamares_add_library_args "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" )
+ list( APPEND calamares_add_library_args
+ "NO_VERSION"
+ "INSTALL_BINDIR" "${PLUGIN_DESTINATION}"
+ )
if( PLUGIN_RESOURCES )
list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" )
@@ -132,16 +138,21 @@ function( calamares_add_plugin )
set( _type ${PLUGIN_TYPE} )
file( WRITE ${_file} "# AUTO-GENERATED metadata file\n# Syntax is YAML 1.2\n---\n" )
file( APPEND ${_file} "type: \"${_type}\"\nname: \"${PLUGIN_NAME}\"\ninterface: \"qtplugin\"\nload: \"lib${target}.so\"\n" )
+ if ( PLUGIN_EMERGENCY )
+ file( APPEND ${_file} "emergency: true\n" )
+ endif()
endif()
- install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE}
- DESTINATION ${PLUGIN_DESTINATION} )
+ if ( NOT PLUGIN_NO_INSTALL )
+ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE}
+ DESTINATION ${PLUGIN_DESTINATION} )
- if ( INSTALL_CONFIG )
- foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} )
- configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY )
- install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE}
- DESTINATION ${PLUGIN_DATA_DESTINATION} )
- endforeach()
+ if ( INSTALL_CONFIG )
+ foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} )
+ configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY )
+ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE}
+ DESTINATION ${PLUGIN_DATA_DESTINATION} )
+ endforeach()
+ endif()
endif()
endfunction()
diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake
index f5dd8c50c..4892cc0f9 100644
--- a/CMakeModules/CalamaresAddTranslations.cmake
+++ b/CMakeModules/CalamaresAddTranslations.cmake
@@ -22,6 +22,40 @@
include( CMakeParseArguments )
+if( NOT _rcc_version_support_checked )
+ set( _rcc_version_support_checked TRUE )
+
+ # Extract the executable name
+ get_property( _rcc_executable
+ TARGET ${Qt5Core_RCC_EXECUTABLE}
+ PROPERTY IMPORTED_LOCATION
+ )
+ if( NOT _rcc_executable )
+ # Weird, probably now uses Qt5::rcc which is wrong too
+ set( _rcc_executable ${Qt5Core_RCC_EXECUTABLE} )
+ endif()
+
+ # Try an empty RCC file with explicit format-version
+ execute_process(
+ COMMAND echo ""
+ COMMAND ${Qt5Core_RCC_EXECUTABLE} --format-version 1 --list -
+ RESULT_VARIABLE _rcc_version_rv
+ ERROR_VARIABLE _rcc_version_dump
+ )
+ if ( _rcc_version_rv EQUAL 0 )
+ # Supported: force to the reproducible version
+ set( _rcc_version_support --format-version 1 )
+ else()
+ # Older Qt versions (5.7, 5.8) don't support setting the
+ # rcc format-version, so won't be reproducible if they
+ # default to version 2.
+ set( _rcc_version_support "" )
+ endif()
+ unset( _rcc_version_rv )
+ unset( _rcc_version_dump )
+endif()
+
+
# Internal macro for adding the C++ / Qt translations to the
# build and install tree. Should be called only once, from
# src/calamares/CMakeLists.txt.
@@ -61,7 +95,7 @@ macro(add_calamares_translations language)
add_custom_command(
OUTPUT ${trans_outfile}
COMMAND "${Qt5Core_RCC_EXECUTABLE}"
- ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile}
+ ARGS ${rcc_options} ${_rcc_version_support} -name ${trans_file} -o ${trans_outfile} ${trans_infile}
MAIN_DEPENDENCY ${trans_infile}
DEPENDS ${QM_FILES}
)
diff --git a/README.md b/README.md
index a41ae6f7a..f35b012c8 100644
--- a/README.md
+++ b/README.md
@@ -15,11 +15,12 @@
Main:
* Compiler with C++11 support: GCC >= 4.9.0 or Clang >= 3.5.1
* CMake >= 3.2
-* Qt >= 5.6
+* Qt >= 5.7
* yaml-cpp >= 0.5.1
-* Python >= 3.3
-* Boost.Python >= 1.55.0
-* extra-cmake-modules (recommended; required for some modules)
+* Python >= 3.3 (required for some modules)
+* Boost.Python >= 1.55.0 (recommended, or PythonQt; one is required for some modules)
+* PythonQt (recommended, or Boost.Python; one is required for some modules)
+* extra-cmake-modules >= 5.18 (recommended; required for some modules)
Modules:
* welcome:
@@ -38,6 +39,6 @@ Modules:
### Building
See [wiki](https://github.com/calamares/calamares/wiki) for up to date
-[building](https://github.com/calamares/calamares/wiki/Developer's-Guide)
-and [deployment](https://github.com/calamares/calamares/wiki/Deployer's-Guide)
+[building](https://github.com/calamares/calamares/wiki/Develop-Guide)
+and [deployment](https://github.com/calamares/calamares/wiki/Deploy-Guide)
instructions.
diff --git a/calamares.desktop b/calamares.desktop
index f8be5d1f3..c1c8d44e2 100644
--- a/calamares.desktop
+++ b/calamares.desktop
@@ -47,9 +47,9 @@ GenericName[es]=Instalador del Sistema
Comment[es]=Calamares — Instalador del Sistema
Name[es]=Instalar Sistema
Icon[et]=calamares
-GenericName[et]=Süsteemi installija
-Comment[et]=Calamares — Süsteemi installija
-Name[et]=Installi süsteem
+GenericName[et]=Süsteemipaigaldaja
+Comment[et]=Calamares — süsteemipaigaldaja
+Name[et]=Paigalda süsteem
Name[eu]=Sistema instalatu
Name[es_PR]=Instalar el sistema
Icon[fr]=calamares
@@ -156,6 +156,9 @@ Icon[eo]=calamares
GenericName[eo]=Sistema Instalilo
Comment[eo]=Calamares — Sistema Instalilo
Name[eo]=Instali Sistemo
+Icon[es_MX]=calamares
+GenericName[es_MX]=Instalador del sistema
+Comment[es_MX]=Calamares - Instalador del sistema
Name[es_MX]=Instalar el Sistema
Icon[pt_PT]=calamares
GenericName[pt_PT]=Instalador de Sistema
diff --git a/lang/calamares_es_MX.ts b/lang/calamares_es_MX.ts
index f6e76dc9a..657507b9d 100644
--- a/lang/calamares_es_MX.ts
+++ b/lang/calamares_es_MX.ts
@@ -4,17 +4,17 @@
-
+ El <strong>entorno de arranque </strong>de este sistema. <br><br>Sistemas antiguos x86 solo admiten <strong>BIOS</strong>. <br>Sistemas modernos usualmente usan <strong>EFI</strong>, pero podrían aparecer como BIOS si inició en modo de compatibilidad.
-
+ Este sistema fue iniciado con un entorno de arranque <strong>EFI. </strong><br><br>Para configurar el arranque desde un entorno EFI, este instalador debe hacer uso de un cargador de arranque, como <strong>GRUB</strong>, <strong>system-boot </strong> o una <strong>Partición de sistema EFI</strong>. Esto es automático, a menos que escoja el particionado manual, en tal caso debe escogerla o crearla por su cuenta.
-
+ Este sistema fue iniciado con un entorno de arranque <strong>BIOS. </strong><br><br>Para configurar el arranque desde un entorno BIOS, este instalador debe instalar un gestor de arranque como <strong>GRUB</strong>, ya sea al inicio de la partición o en el <strong> Master Boot Record</strong> cerca del inicio de la tabla de particiones (preferido). Esto es automático, a menos que escoja el particionado manual, en este caso debe configurarlo por su cuenta.
@@ -76,12 +76,12 @@
-
+ ninguno
-
+ Interfaz:
@@ -138,7 +138,7 @@
- La carpeta de trabajo %1 para la tarea de python %2 no se pudo leer.
+ La carpeta de trabajo %1 para la tarea de python %2 no es accesible.
@@ -179,44 +179,44 @@
-
+ Cancelar instalación sin cambiar el sistema.
-
+ &Instalar
- Cancelar la instalación?
+ ¿Cancelar la instalación?
- Realmente desea cancelar el proceso de instalación actual?
+ ¿Realmente desea cancelar el proceso de instalación actual?
El instalador terminará y se perderán todos los cambios.
-
+ &Si
-
+ &No
-
+ &Cerrar
- Continuar con la instalación?
+ ¿Continuar con la instalación?
@@ -236,12 +236,12 @@ El instalador terminará y se perderán todos los cambios.
-
+ &Hecho
-
+ Instalación completa. Cierre el instalador.
@@ -259,12 +259,12 @@ El instalador terminará y se perderán todos los cambios.
- Excepción desconocida
+ Tipo de excepción desconocida
- error no analizable Python
+ error Python no analizable
@@ -274,7 +274,7 @@ El instalador terminará y se perderán todos los cambios.
- Error de Python Unfetchable.
+ Error de Python inalcanzable.
@@ -305,8 +305,7 @@ El instalador terminará y se perderán todos los cambios.
- El programa le hará algunas preguntas y configurará %2 en su ordenador.
-
+ El programa le hará algunas preguntas y configurará %2 en su ordenador.
@@ -344,7 +343,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ %1 será reducido a %2MB y una nueva partición de %3MB será creado para %4.
@@ -362,7 +361,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Reuse %1 como partición home para %2.
@@ -393,7 +392,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Este dispositivo de almacenamiento parece no tener un sistema operativo en el. ¿que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento.
@@ -401,12 +400,12 @@ El instalador terminará y se perderán todos los cambios.
-
+ <strong>Borrar disco</strong> <br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento seleccionado.
-
+ Este dispositivo de almacenamiento tiene %1 en el. ¿Que le gustaría hacer? <br/>Usted podrá revisar y confirmar sus elecciones antes de que cualquier cambio se realice al dispositivo de almacenamiento.
@@ -414,7 +413,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ <strong>Instalar junto a</strong> <br/>El instalador reducirá una partición con el fin de hacer espacio para %1.
@@ -422,17 +421,17 @@ El instalador terminará y se perderán todos los cambios.
-
+ <strong>Reemplazar una partición</strong> <br/>Reemplaza una partición con %1.
-
+ Este dispositivo de almacenamiento ya tiene un sistema operativo en el. ¿Que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento.
-
+ Este dispositivo de almacenamiento tiene múltiples sistemas operativos en el. ¿Que le gustaria hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento.
@@ -440,18 +439,17 @@ El instalador terminará y se perderán todos los cambios.
- <b>Instalar %1 en una partición existente</b><br/>Podrás elegir que partición borrar.
+ Despejar puntos de montaje para operaciones de particionamiento en %1
- Limpiar puntos de montaje para operaciones de particionamiento en %1
+ Despejando puntos de montaje para operaciones de particionamiento en %1
- Todas las unidades desmontadas en %1
-
+ Puntos de montaje despejados para %1
@@ -459,12 +457,12 @@ El instalador terminará y se perderán todos los cambios.
- Quitar todos los puntos de montaje temporales.
+ Despejar todos los puntos de montaje temporales.
- Limpiando todos los puntos de montaje temporales.
+ Despejando todos los puntos de montaje temporales.
@@ -474,7 +472,7 @@ El instalador terminará y se perderán todos los cambios.
- Se han quitado todos los puntos de montaje temporales.
+ Todos los puntos de montaje temporales despejados.
@@ -483,17 +481,17 @@ El instalador terminará y se perderán todos los cambios.
-
+ No puede ejecutarse el comando.
-
+ Este comando se ejecuta en el entorno host y necesita saber la ruta root, pero no hay rootMountPoint definido.
-
+ Este comando necesita saber el nombre de usuario, pero no hay nombre de usuario definido.
@@ -501,7 +499,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Tareas de procesos contextuales.
@@ -509,12 +507,12 @@ El instalador terminará y se perderán todos los cambios.
- Crear partición
+ Crear una partición
-
+ MiB
@@ -539,27 +537,27 @@ El instalador terminará y se perderán todos los cambios.
-
+ Nombre del LVM LV.
- Banderas:
+ Indicadores:
- Punto de &montaje:
+ Punto de &Montaje:
- &Tamaño:
+ Ta&maño:
-
+ En&criptar
@@ -579,7 +577,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Punto de montaje ya esta en uso. Por favor seleccione otro.
@@ -722,32 +720,32 @@ El instalador terminará y se perderán todos los cambios.
-
+ Este tipo de <strong>tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>La única forma de cambiar el tipo de tabla de partición es borrar y recrear la tabla de partición de cero. lo cual destruye todos los datos en el dispositivo de almacenamiento.<br> Este instalador conservará la actual tabla de partición a menos que usted explícitamente elija lo contrario. <br>Si no está seguro, en los sistemas modernos GPT es lo preferible.
-
+ Este dispositivo tiene una tabla de partición <strong>%1</strong>
-
+ Este es un dispositivo<br> <strong>loop</strong>. <br>Es un pseudo - dispositivo sin tabla de partición que hace un archivo accesible como un dispositivo bloque. Este tipo de configuración usualmente contiene un solo sistema de archivos.
-
+ Este instalador <strong>no puede detectar una tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>El dispositivo o no tiene tabla de partición, o la tabla de partición esta corrupta o de un tipo desconocido. <br>Este instalador puede crear una nueva tabla de partición por usted ya sea automáticamente, o a través de la página de particionado manual.
-
+ <br><br>Este es el tipo de tabla de partición recomendada para sistemas modernos que inician desde un entorno de arranque <strong>EFI</strong>.
-
+ <br><br>Este tipo de tabla de partición solo es recomendable en sistemas antiguos que inician desde un entorno de arranque <strong>BIOS</strong>. GPT es recomendado en la otra mayoría de casos.<br><br><strong> Precaución:</strong> La tabla de partición MBR es una era estándar MS-DOS obsoleta.<br> Unicamente 4 particiones <em>primarias</em> pueden ser creadas, y de esas 4, una puede ser una partición <em>extendida</em>, la cual puede a su vez contener varias particiones <em>logicas</em>.
@@ -763,17 +761,17 @@ El instalador terminará y se perderán todos los cambios.
-
+ Escribe configuración LUKS para Dracut a %1
-
+ Omitir escritura de configuración LUKS por Dracut: "/" partición no está encriptada.
-
+ Falla al abrir %1
@@ -781,7 +779,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Trabajo C++ Simulado
@@ -824,7 +822,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ MiB
@@ -834,12 +832,12 @@ El instalador terminará y se perderán todos los cambios.
- Banderas:
+ Indicadores:
-
+ Punto de montaje ya esta en uso. Por favor seleccione otro.
@@ -852,22 +850,22 @@ El instalador terminará y se perderán todos los cambios.
-
+ En&criptar sistema
-
+ Contraseña segura
-
+ Confirmar contraseña segura
-
+ Favor ingrese la misma contraseña segura en ambas casillas.
@@ -913,12 +911,12 @@ El instalador terminará y se perderán todos los cambios.
- Forma
+ Formulario
-
+ <html><head/><body><p>Cuando esta casilla esta chequeada, su sistema reiniciará inmediatamente cuando de click en <span style=" font-style:italic;">Hecho</span> o cierre el instalador.</p></body></html>
@@ -933,7 +931,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ <h1>Instalación fallida</h1> <br/>%1 no ha sido instalado en su computador. <br/>El mensaje de error es: %2.
@@ -946,12 +944,12 @@ El instalador terminará y se perderán todos los cambios.
-
+ Instalación Completa
-
+ La instalación de %1 está completa.
@@ -987,7 +985,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Favor instale la Konsola KDE e intentelo de nuevo!
@@ -1044,7 +1042,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ &OK
@@ -1130,12 +1128,12 @@ El instalador terminará y se perderán todos los cambios.
-
+ El lenguaje del sistema será establecido a %1.
-
+ Los números y datos locales serán establecidos a %1.
@@ -1188,17 +1186,17 @@ El instalador terminará y se perderán todos los cambios.
-
+ Descripción
-
+ Instalación de Red. (Deshabilitada: No se puede acceder a la lista de paquetes, verifique su conección de red)
-
+ Instalación de Red. (Deshabilitada: Grupos de datos invalidos recibidos)
@@ -1206,7 +1204,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Selección de paquete
@@ -1214,242 +1212,242 @@ El instalador terminará y se perderán todos los cambios.
-
+ La contraseña es muy corta
-
+ La contraseña es muy larga
-
+ La contraseña es muy débil
-
+ Error de asignación de memoria al configurar '%1'
-
+ Error en la asignación de memoria
-
+ La contraseña es la misma que la anterior
-
+ La contraseña es un Palíndromo
-
+ La contraseña solo difiere en cambios de mayúsculas y minúsculas
-
+ La contraseña es muy similar a la anterior.
-
+ La contraseña contiene el nombre de usuario de alguna forma
-
+ La contraseña contiene palabras del nombre real del usuario de alguna forma
-
+ La contraseña contiene palabras prohibidas de alguna forma
-
+ La contraseña contiene menos de %1 dígitos
-
+ La contraseña contiene muy pocos dígitos
-
+ La contraseña contiene menos de %1 letras mayúsculas
-
+ La contraseña contiene muy pocas letras mayúsculas
-
+ La contraseña continee menos de %1 letras minúsculas
-
+ La contraseña contiene muy pocas letras minúsculas
-
+ La contraseña contiene menos de %1 caracteres no alfanuméricos
-
+ La contraseña contiene muy pocos caracteres alfanuméricos
-
+ La contraseña es mas corta que %1 caracteres
-
+ La contraseña es muy corta
-
+ La contraseña solo es la rotación de la anterior
-
+ La contraseña contiene menos de %1 tipos de caracteres
-
+ La contraseña no contiene suficientes tipos de caracteres
-
+ La contraseña contiene más de %1 caracteres iguales consecutivamente
-
+ La contraseña contiene muchos caracteres iguales repetidos consecutivamente
-
+ La contraseña contiene mas de %1 caracteres de la misma clase consecutivamente
-
+ La contraseña contiene muchos caracteres de la misma clase consecutivamente
-
+ La contraseña contiene secuencias monotónicas mas larga que %1 caracteres
-
+ La contraseña contiene secuencias monotónicas muy largas
-
+ Contraseña no suministrada
-
+ No pueden obtenerse números aleatorios del dispositivo RING
-
+ Generación de contraseña fallida - entropía requerida muy baja para los ajustes
-
+ La contraseña falla el chequeo del diccionario %1
-
+ La contraseña falla el chequeo del diccionario
-
+ Configuración desconocida - %1
-
+ Configuración desconocida
-
+ Valor entero de configuración incorrecto - %1
-
+ Valor entero incorrecto
-
+ Ajuste de % 1 no es de tipo entero
-
+ Ajuste no es de tipo entero
-
+ El ajuste %1 no es de tipo cadena
-
+ El ajuste no es de tipo cadena
-
+ Apertura del archivo de configuración fallida
-
+ El archivo de configuración está malformado
-
+ Falla fatal
-
+ Error desconocido
@@ -1545,32 +1543,32 @@ El instalador terminará y se perderán todos los cambios.
-
+ Root
-
+ Home
-
+ Boot
-
+ Sistema EFI
-
+ Swap
-
+ Partición nueva para %1
@@ -1580,7 +1578,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ %1 %2
@@ -1628,7 +1626,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Dis&positivo de almacenamiento:
@@ -1658,7 +1656,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Instalar &cargador de arranque en:
@@ -1668,12 +1666,12 @@ El instalador terminará y se perderán todos los cambios.
-
+ No se puede crear nueva partición
-
+ La tabla de partición en %1 ya tiene %2 particiones primarias, y no pueden agregarse mas. Favor remover una partición primaria y en cambio, agregue una partición extendida.
@@ -1746,32 +1744,32 @@ El instalador terminará y se perderán todos los cambios.
-
+ Sistema de partición EFI no configurada
-
+ Un sistema de partición EFI es necesario para iniciar %1. <br/><br/>Para configurar un sistema de partición EFI, Regrese y seleccione o cree un sistema de archivos FAT32 con la bandera <strong>esp</strong> activada y el punto de montaje <strong>%2</strong>. <br/><br/>Puede continuar sin configurar una partición de sistema EFI, pero su sistema podría fallar al iniciar.
-
+ Indicador de partición del sistema EFI no configurado
-
+ Una partición del sistema EFI es necesaria para iniciar% 1. <br/><br/>Una partición se configuró con el punto de montaje <strong>% 2</strong>, pero su bandera <strong>esp</strong> no está configurada. <br/>Para establecer el indicador, retroceda y edite la partición.<br/><br/> Puede continuar sin configurar el indicador, pero su sistema puede fallar al iniciar.
-
+ Partición de arranque no encriptada
-
+ Se creó una partición de arranque separada junto con una partición raíz cifrada, pero la partición de arranque no está encriptada.<br/><br/> Existen problemas de seguridad con este tipo de configuración, ya que los archivos importantes del sistema se guardan en una partición no encriptada. <br/>Puede continuar si lo desea, pero el desbloqueo del sistema de archivos ocurrirá más tarde durante el inicio del sistema. <br/>Para encriptar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Encriptar</strong> en la ventana de creación de la partición.
@@ -1779,13 +1777,13 @@ El instalador terminará y se perderán todos los cambios.
-
+ Trabajo Plasma Look-and-Feel
-
+ No se pudo seleccionar el paquete KDE Plasma Look-and-Feel
@@ -1798,12 +1796,12 @@ El instalador terminará y se perderán todos los cambios.
-
+ Marcador de posición
-
+ Favor seleccione un Escritorio Plasma KDE Look-and-Feel. También puede omitir este paso y configurar el Look-and-Feel una vez el sistema está instalado. Haciendo clic en la selección Look-and-Feel le dará una previsualización en vivo de ese Look-and-Feel.
@@ -1811,7 +1809,7 @@ El instalador terminará y se perderán todos los cambios.
-
+ Look-and-Feel
@@ -1819,17 +1817,17 @@ El instalador terminará y se perderán todos los cambios.
-
+ Guardando archivos para más tarde ...
-
+ No hay archivos configurados para guardar más tarde.
-
+ No todos los archivos configurados podrían conservarse.
@@ -1838,39 +1836,42 @@ El instalador terminará y se perderán todos los cambios.
-
+
+No hubo salida desde el comando.
-
+
+Salida
+
-
+ El comando externo ha fallado.
-
+ El comando <i>%1</i> ha fallado.
-
+ El comando externo falló al iniciar.
-
+ El comando <i>%1</i> Falló al iniciar.
-
+ Error interno al iniciar el comando.
@@ -1880,22 +1881,22 @@ Output:
-
+ Comando externo falla al finalizar
-
+ Comando <i>%1</i> falló al finalizar en %2 segundos.
-
+ Comando externo finalizado con errores
-
+ Comando <i>%1</i> finalizó con código de salida %2.
@@ -1914,27 +1915,27 @@ Output:
-
+ desconocido
-
+ extendido
-
+ no formateado
-
+ swap
-
+ Espacio no particionado o tabla de partición desconocida
@@ -2068,7 +2069,7 @@ Output:
-
+ La pantalla es muy pequeña para mostrar el instalador
@@ -2099,12 +2100,12 @@ Output:
-
+ Escaneando dispositivos de almacenamiento...
-
+ Particionando
@@ -2164,7 +2165,7 @@ Output:
-
+ Fallo al escribir la configuración del teclado en el directorio /etc/default existente.
@@ -2172,82 +2173,82 @@ Output:
-
+ Establecer indicadores en la partición% 1.
-
+ Establecer indicadores en la partición %1MB %2.
-
+ Establecer indicadores en la nueva partición.
-
+ Borrar indicadores en la partición <strong>%1</strong>.
-
+ Borrar indicadores %1MB en la partición <strong>%2</strong>.
-
+ Borrar indicadores en la nueva partición.
-
+ Indicador de partición <strong>%1</strong> como <strong>%2</strong>.
-
+ Indicador %1MB de partición <strong>%2</strong> como <strong>%3</strong>.
-
+ Marcar la nueva partición como <strong>%1</strong>.
-
+ Borrar indicadores en la partición <strong>%1</strong>.
-
+ Borrar indicadores en la partición %1MB <strong>%2</strong>.
-
+ Borrar indicadores en la nueva partición.
-
+ Establecer indicadores <strong>%2</strong> en la partición <strong>%1</strong>.
-
+ Establecer indicadores <strong>%3</strong> en partición %1MB <strong>%2</strong>
-
+ Establecer indicadores <strong>%1</strong> en nueva partición.
-
+ El instalador no pudo establecer indicadores en la partición% 1.
@@ -2275,12 +2276,12 @@ Output:
-
+ No se puede deshabilitar la cuenta root.
-
+ Contraseña terminada con un error de código %1.
@@ -2336,7 +2337,7 @@ Output:
-
+ Trabajo de procesos Shell
@@ -2345,7 +2346,7 @@ Output:
slide counter, %1 of %2 (numeric)
-
+ %L1 / %L2
@@ -2369,22 +2370,22 @@ Output:
-
+ Retroalimentacion de la instalación
-
+ Envío de retroalimentación de instalación.
-
+ Error interno en el seguimiento de instalación.
-
+ Tiempo de espera en la solicitud HTTP agotado.
@@ -2392,28 +2393,28 @@ Output:
-
+ Retroalimentación de la maquina
-
+ Configurando la retroalimentación de la maquina.
-
+ Error en la configuración de retroalimentación de la máquina.
-
+ No se pudo configurar correctamente la retroalimentación de la máquina, error de script% 1.
-
+ No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error% 1.
@@ -2426,51 +2427,51 @@ Output:
-
+ Marcador de posición
-
+ <html><head/><body><p>Al seleccionar esto, usted no enviará <span style=" font-weight:600;">ninguna información</span> acerca de su instalacion.</p></body></html>
-
+ Etiqueta de texto
-
+ ...
-
+ <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Haga clic aquí para más información acerca de comentarios del usuario</span></a></p></body></html>
-
+ El seguimiento de instalación ayuda a% 1 a ver cuántos usuarios tienen, qué hardware instalan% 1 y (con las dos últimas opciones a continuación), obtener información continua sobre las aplicaciones preferidas. Para ver qué se enviará, haga clic en el ícono de ayuda al lado de cada área.
-
+ Al seleccionar esto usted enviará información acerca de su instalación y hardware. Esta informacion será <b>enviada unicamente una vez</b> después de terminada la instalación.
-
+ Al seleccionar esto usted enviará información <b>periodicamente</b> acerca de su instalación, hardware y aplicaciones a %1.
-
+ Al seleccionar esto usted enviará información <b>regularmente</b> acerca de su instalación, hardware y patrones de uso de aplicaciones a %1.
@@ -2478,7 +2479,7 @@ Output:
-
+ Retroalimentación
@@ -2563,7 +2564,7 @@ Output:
-
+ <h1>Bienvenido al instalador Calamares para %1.</h1>
@@ -2573,7 +2574,7 @@ Output:
-
+ <h1>%1</h1><br/><strong>%2<br/>por %3</strong><br/><br/>Derechos de autor 2014-2017 Teo Mrnjavac <teo@kde.org> <br/> Derechos de autor 2017 Adriaan de Groot <groot@kde.org><br/> Gracias a Anke Boersma, Aurélien Gâteau, Kevin Kofler, Lisa Vitolo, Philip Müller, Pier Luigi Fiorini, Rohan Garg y al <a href="https://www.transifex.com/calamares/calamares/">equipo de traductores Calamares</a>. <br/><br/> Desarrollo de <a href="https://calamares.io/">Calamares</a> patrocinado por <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.
diff --git a/lang/calamares_et.ts b/lang/calamares_et.ts
index 871f447da..8fcf5f20e 100644
--- a/lang/calamares_et.ts
+++ b/lang/calamares_et.ts
@@ -9,12 +9,12 @@
- See süsteem käivitati <strong>EFI</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust EFI keskkonnast, peab see installija paigaldama käivituslaaduri rakenduse, näiteks <strong>GRUB</strong> või <strong>systemd-boot</strong> sinu <strong>EFI süsteemipartitsioonile</strong>. See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle valima või ise looma.
+ See süsteem käivitati <strong>EFI</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust EFI keskkonnast, peab see paigaldaja paigaldama käivituslaaduri rakenduse, näiteks <strong>GRUB</strong> või <strong>systemd-boot</strong> sinu <strong>EFI süsteemipartitsioonile</strong>. See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle valima või ise looma.
- See süsteem käivitati <strong>BIOS</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust BIOS keskkonnast, peab see installija paigaldama käivituslaaduri, näiteks <strong>GRUB</strong>, kas mõne partitsiooni algusse või <strong>Master Boot Record</strong>'i paritsioonitabeli alguse lähedale (eelistatud). See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle ise seadistama.
+ See süsteem käivitati <strong>BIOS</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust BIOS keskkonnast, peab see paigaldaja paigaldama käivituslaaduri, näiteks <strong>GRUB</strong>, kas mõne partitsiooni algusse või <strong>Master Boot Record</strong>'i paritsioonitabeli alguse lähedale (eelistatud). See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle ise seadistama.
@@ -37,7 +37,7 @@
- Ära installi käivituslaadurit
+ Ära paigalda käivituslaadurit
@@ -99,7 +99,7 @@
- Installi
+ Paigalda
@@ -179,24 +179,24 @@
- Tühista installimine ilma süsteemi muutmata.
+ Tühista paigaldamine ilma süsteemi muutmata.
- &Installi
+ &Paigalda
- Tühista installimine?
+ Tühista paigaldamine?
- Kas sa tõesti soovid tühistada praeguse installiprotsessi?
-Installija sulgub ja kõik muutused kaovad.
+ Kas sa tõesti soovid tühistada praeguse paigaldusprotsessi?
+Paigaldaja sulgub ning kõik muutused kaovad.
@@ -221,12 +221,12 @@ Installija sulgub ja kõik muutused kaovad.
- %1 installija on tegemas muudatusi sinu kettale, et installida %2.<br/><strong>Sa ei saa neid muudatusi tagasi võtta.</strong>
+ %1 paigaldaja on tegemas muudatusi sinu kettale, et paigaldada %2.<br/><strong>Sa ei saa neid muudatusi tagasi võtta.</strong>
- &Installi kohe
+ &Paigalda kohe
@@ -241,7 +241,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installimine on lõpetatud. Sulge installija.
+ Paigaldamine on lõpetatud. Sulge paigaldaja.
@@ -251,7 +251,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installimine ebaõnnestus
+ Paigaldamine ebaõnnestus
@@ -282,7 +282,7 @@ Installija sulgub ja kõik muutused kaovad.
- %1 installija
+ %1 paigaldaja
@@ -295,12 +295,12 @@ Installija sulgub ja kõik muutused kaovad.
- See arvuti ei rahulda %1 installimiseks vajalikke minimaaltingimusi.<br/>Installimine ei saa jätkuda. <a href="#details">Detailid...</a>
+ See arvuti ei rahulda %1 paigldamiseks vajalikke minimaaltingimusi.<br/>Paigaldamine ei saa jätkuda. <a href="#details">Detailid...</a>
- See arvuti ei rahulda mõnda %1 installimiseks soovitatud tingimust.<br/>Installimine võib jätkuda, ent mõned funktsioonid võivad olla keelatud.
+ See arvuti ei rahulda mõnda %1 paigaldamiseks soovitatud tingimust.<br/>Paigaldamine võib jätkuda, ent mõned funktsioonid võivad olla keelatud.
@@ -371,7 +371,7 @@ Installija sulgub ja kõik muutused kaovad.
- <strong>Vali partitsioon, kuhu installida</strong>
+ <strong>Vali partitsioon, kuhu paigaldada</strong>
@@ -412,7 +412,7 @@ Installija sulgub ja kõik muutused kaovad.
- <strong>Installi kõrvale</strong><br/>Installija vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1.
+ <strong>Paigalda kõrvale</strong><br/>Paigaldaja vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1.
@@ -599,7 +599,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installija ei suutnud luua partitsiooni kettale "%1".
+ Paigaldaja ei suutnud luua partitsiooni kettale "%1".
@@ -650,7 +650,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installija ei suutnud luua partitsioonitabelit kettale %1.
+ Paigaldaja ei suutnud luua partitsioonitabelit kettale %1.
@@ -711,7 +711,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installija ei suutnud kustutada partitsiooni %1.
+ Paigaldaja ei suutnud kustutada partitsiooni %1.
@@ -719,7 +719,7 @@ Installija sulgub ja kõik muutused kaovad.
- <strong>Partitsioonitabeli</strong> tüüp valitud mäluseadmel.<br><br>Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.<br>See installija säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.<br>Kui pole kindel, eelista modernsetel süsteemidel GPT-d.
+ <strong>Partitsioonitabeli</strong> tüüp valitud mäluseadmel.<br><br>Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.<br>See paigaldaja säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.<br>Kui pole kindel, eelista modernsetel süsteemidel GPT-d.
@@ -734,7 +734,7 @@ Installija sulgub ja kõik muutused kaovad.
- See installija <strong>ei suuda tuvastada partitsioonitabelit</strong>valitud mäluseadmel.<br><br>Seadmel kas pole partitsioonitabelit, see on korrumpeerunud või on tundmatut tüüpi.<br>See installija võib sulle luua uue partitsioonitabeli, kas automaatselt või läbi käsitsi partitsioneerimise lehe.
+ See paigaldaja <strong>ei suuda tuvastada partitsioonitabelit</strong>valitud mäluseadmel.<br><br>Seadmel kas pole partitsioonitabelit, see on korrumpeerunud või on tundmatut tüüpi.<br>See paigaldaja võib sulle luua uue partitsioonitabeli, kas automaatselt või läbi käsitsi partitsioneerimise lehe.
@@ -877,7 +877,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installi %1 <strong>uude</strong> %2 süsteemipartitsiooni.
+ Paigalda %1 <strong>uude</strong> %2 süsteemipartitsiooni.
@@ -887,7 +887,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installi %2 %3 süsteemipartitsioonile <strong>%1</strong>.
+ Paigalda %2 %3 süsteemipartitsioonile <strong>%1</strong>.
@@ -897,7 +897,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installi käivituslaadur kohta <strong>%1</strong>.
+ Paigalda käivituslaadur kohta <strong>%1</strong>.
@@ -915,7 +915,7 @@ Installija sulgub ja kõik muutused kaovad.
- <html><head/><body><p>Kui see märkeruut on täidetud, taaskäivitab su süsteem automaatselt, kui vajutad <span style=" font-style:italic;">Valmis</span> või sulged installija.</p></body></html>
+ <html><head/><body><p>Kui see märkeruut on täidetud, taaskäivitab su süsteem automaatselt, kui vajutad <span style=" font-style:italic;">Valmis</span> või sulged paigaldaja.</p></body></html>
@@ -925,12 +925,12 @@ Installija sulgub ja kõik muutused kaovad.
- <h1>Kõik on valmis.</h1><br/>%1 on installitud sinu arvutisse.<br/>Sa võid nüüd taaskäivitada oma uude süsteemi või jätkata %2 live-keskkonna kasutamist.
+ <h1>Kõik on valmis.</h1><br/>%1 on paigaldatud sinu arvutisse.<br/>Sa võid nüüd taaskäivitada oma uude süsteemi või jätkata %2 live-keskkonna kasutamist.
- <h1>Installimine ebaõnnestus</h1><br/>%1 ei installitud sinu arvutisse.<br/>Veateade oli: %2.
+ <h1>Paigaldamine ebaõnnestus</h1><br/>%1 ei paigaldatud sinu arvutisse.<br/>Veateade oli: %2.
@@ -943,12 +943,12 @@ Installija sulgub ja kõik muutused kaovad.
- Installimine lõpetatud
+ Paigaldus valmis
- %1 installimine on lõpetatud.
+ %1 paigaldus on valmis.
@@ -971,7 +971,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installija ei suutnud vormindada partitsiooni %1 kettal "%2".
+ Paigaldaja ei suutnud vormindada partitsiooni %1 kettal "%2".
@@ -979,12 +979,12 @@ Installija sulgub ja kõik muutused kaovad.
- Konsole pole installitud
+ Konsole pole paigaldatud
- Palun installi KDE Konsole ja proovi uuesti!
+ Palun paigalda KDE Konsole ja proovi uuesti!
@@ -1059,7 +1059,7 @@ Installija sulgub ja kõik muutused kaovad.
- <h1>Litsensileping</h1>See seadistusprotseduur installib omandiõigusega tarkvara, mis vastab litsensitingimustele.
+ <h1>Litsensileping</h1>See seadistusprotseduur paigaldab omandiõigusega tarkvara, mis vastab litsensitingimustele.
@@ -1069,12 +1069,12 @@ Installija sulgub ja kõik muutused kaovad.
- <h1>Litsensileping</h1>See seadistusprotseduur võib installida omandiõigusega tarkvara, mis vastab litsensitingimustele, et pakkuda lisafunktsioone ja täiendada kasutajakogemust.
+ <h1>Litsensileping</h1>See seadistusprotseduur võib paigaldada omandiõigusega tarkvara, mis vastab litsensitingimustele, et pakkuda lisafunktsioone ja täiendada kasutajakogemust.
- Palun loe läbi allolevad lõppkasutaja litsensilepingud (EULAd).<br/>Kui sa tingimustega ei nõustu, ei installita omandiõigusega tarkvara ning selle asemel kasutatakse avatud lähtekoodiga alternatiive.
+ Palun loe läbi allolevad lõppkasutaja litsensilepingud (EULAd).<br/>Kui sa tingimustega ei nõustu, ei paigaldata omandiõigusega tarkvara ning selle asemel kasutatakse avatud lähtekoodiga alternatiive.
@@ -1190,12 +1190,12 @@ Installija sulgub ja kõik muutused kaovad.
- Võrguinstall. (Keelatud: paketinimistute saamine ebaõnnestus, kontrolli oma võrguühendust)
+ Võrgupaigaldus. (Keelatud: paketinimistute saamine ebaõnnestus, kontrolli oma võrguühendust)
- Võrguinstall. (Keelatud: vastu võetud sobimatud grupiandmed)
+ Võrgupaigaldus. (Keelatud: vastu võetud sobimatud grupiandmed)
@@ -1494,7 +1494,7 @@ Installija sulgub ja kõik muutused kaovad.
- <small>Kui rohkem kui üks inimene kasutab seda arvutit, saad sa määrata mitu kontot peale installi.</small>
+ <small>Kui rohkem kui üks inimene kasutab seda arvutit, saad sa pärast paigaldust määrata mitu kontot.</small>
@@ -1655,7 +1655,7 @@ Installija sulgub ja kõik muutused kaovad.
- Installi käivituslaadur kohta:
+ Paigalda käivituslaadur kohta:
@@ -1688,12 +1688,12 @@ Installija sulgub ja kõik muutused kaovad.
- Installi %1 praeguse operatsioonisüsteemi <strong>kõrvale</strong>
+ Paigalda %1 praeguse operatsioonisüsteemi <strong>kõrvale</strong>
- <strong>Tühjenda</strong> ketas ja installi %1.
+ <strong>Tühjenda</strong> ketas ja paigalda %1.
@@ -1708,12 +1708,12 @@ Installija sulgub ja kõik muutused kaovad.
- Installi %1 teise operatsioonisüsteemi <strong>kõrvale</strong> kettal <strong>%2</strong> (%3).
+ Paigalda %1 teise operatsioonisüsteemi <strong>kõrvale</strong> kettal <strong>%2</strong> (%3).
- <strong>Tühjenda</strong> ketas <strong>%2</strong> (%3) ja installi %1.
+ <strong>Tühjenda</strong> ketas <strong>%2</strong> (%3) ja paigalda %1.
@@ -1800,7 +1800,7 @@ Installija sulgub ja kõik muutused kaovad.
- Palun vali KDE Plasma Desktop'ile välimus-ja-tunnetus. Sa võid selle sammu ka vahele jätta ja seadistada välimust-ja-tunnetust siis, kui süsteem on installitud. Välimuse-ja-tunnetuse valikule klõpsates näed selle reaalajas eelvaadet.
+ Palun vali KDE Plasma töölauale välimus-ja-tunnetus. Sa võid selle sammu ka vahele jätta ja seadistada välimust-ja-tunnetust siis, kui süsteem on paigaldatud. Välimuse-ja-tunnetuse valikule klõpsates näed selle reaalajas eelvaadet.
@@ -1947,7 +1947,7 @@ Väljund:
- Vali, kuhu soovid %1 installida.<br/><font color="red">Hoiatus: </font>see kustutab valitud partitsioonilt kõik failid.
+ Vali, kuhu soovid %1 paigaldada.<br/><font color="red">Hoiatus: </font>see kustutab valitud partitsioonilt kõik failid.
@@ -1957,17 +1957,17 @@ Väljund:
- %1 ei saa installida tühjale kohale. Palun vali olemasolev partitsioon.
+ %1 ei saa paigldada tühjale kohale. Palun vali olemasolev partitsioon.
- %1 ei saa installida laiendatud partitsioonile. Palun vali olemasolev põhiline või loogiline partitsioon.
+ %1 ei saa paigaldada laiendatud partitsioonile. Palun vali olemasolev põhiline või loogiline partitsioon.
- %1 ei saa installida sellele partitsioonidel.
+ %1 ei saa sellele partitsioonile paigaldada.
@@ -1999,7 +1999,7 @@ Väljund:
- <strong>%3</strong><br/><br/>%1 installitakse partitsioonile %2.<br/><font color="red">Hoiatus: </font>kõik andmed partitsioonil %2 kaovad.
+ <strong>%3</strong><br/><br/>%1 paigaldatakse partitsioonile %2.<br/><font color="red">Hoiatus: </font>kõik andmed partitsioonil %2 kaovad.
@@ -2062,12 +2062,12 @@ Väljund:
- Installija ei tööta administraatoriõigustega.
+ Paigaldaja pole käivitatud administraatoriõigustega.
- Ekraan on liiga väike installija kuvamiseks.
+ Ekraan on paigaldaja kuvamiseks liiga väike.
@@ -2090,7 +2090,7 @@ Väljund:
- Installijal ebaõnnestus partitsiooni %1 suuruse muutmine kettal "%2".
+ Paigaldajal ebaõnnestus partitsiooni %1 suuruse muutmine kettal "%2".
@@ -2246,7 +2246,7 @@ Väljund:
- Installija ei suutnud silte määrata partitsioonile %1.
+ Paigaldaja ei suutnud partitsioonile %1 silte määrata.
@@ -2352,7 +2352,7 @@ Väljund:
- See on ülevaade sellest mis juhtub, kui alustad installiprotseduuri.
+ See on ülevaade sellest mis juhtub, kui alustad paigaldusprotseduuri.
@@ -2368,17 +2368,17 @@ Väljund:
- Installimise tagasiside
+ Paigalduse tagasiside
- Saadan installimise tagasisidet.
+ Saadan paigalduse tagasisidet.
- Installi jälitamisel esines sisemine viga.
+ Paigaldate jälitamisel esines sisemine viga.
@@ -2430,7 +2430,7 @@ Väljund:
- <html><head/><body><p>Seda valides <span style=" font-weight:600;">ei saada sa üldse</span> teavet oma installi kohta.</p></body></html>
+ <html><head/><body><p>Seda valides <span style=" font-weight:600;">ei saada sa üldse</span> teavet oma paigalduse kohta.</p></body></html>
@@ -2454,22 +2454,22 @@ Väljund:
- Installijälitamine aitab %1-l näha, mitu kasutajat neil on, mis riistvarale nad %1 installivad ja (märkides kaks alumist valikut) saada pidevat teavet eelistatud rakenduste kohta. Et näha, mis infot saadetakse, palun klõpsa abiikooni iga ala kõrval.
+ Paigalduse jälitamine aitab %1-l näha, mitu kasutajat neil on, mis riistvarale nad %1 paigaldavad ja (märkides kaks alumist valikut) saada pidevat teavet eelistatud rakenduste kohta. Et näha, mis infot saadetakse, palun klõpsa abiikooni iga ala kõrval.
- Seda valides saadad sa teavet oma installi ja riistvara kohta. See teave <b>saadetakse ainult korra</b>peale installi lõppu.
+ Seda valides saadad sa teavet oma paigalduse ja riistvara kohta. See teave <b>saadetakse ainult korra</b>peale paigalduse lõppu.
- Seda valides saadad sa %1-le <b>perioodiliselt</b> infot oma installi, riistvara ja rakenduste kohta.
+ Seda valides saadad sa %1-le <b>perioodiliselt</b> infot oma paigalduse, riistvara ja rakenduste kohta.
- Seda valides saadad sa %1-le <b>regulaarselt</b> infot oma installi, riistvara, rakenduste ja kasutusharjumuste kohta.
+ Seda valides saadad sa %1-le <b>regulaarselt</b> infot oma paigalduse, riistvara, rakenduste ja kasutusharjumuste kohta.
@@ -2557,17 +2557,17 @@ Väljund:
- <h1>Tere tulemast %1 installijasse.</h1>
+ <h1>Tere tulemast %1 paigaldajasse.</h1>
- <h1>Tere tulemast Calamares'i installijasse %1 jaoks.</h1>
+ <h1>Tere tulemast Calamares'i paigaldajasse %1 jaoks.</h1>
- Teave %1 installija kohta
+ Teave %1 paigaldaja kohta
diff --git a/lang/calamares_ko.ts b/lang/calamares_ko.ts
new file mode 100644
index 000000000..73b81b498
--- /dev/null
+++ b/lang/calamares_ko.ts
@@ -0,0 +1,2587 @@
+
+
+ BootInfoWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BootLoaderModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::DebugWindow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::ExecutionViewStep
+
+
+
+
+
+
+
+ Calamares::JobThread
+
+
+
+
+
+
+
+ Calamares::ProcessJob
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::PythonJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::ViewManager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalamaresPython::Helper
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalamaresWindow
+
+
+
+
+
+
+
+
+
+
+
+
+ CheckerWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ChoicePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ClearMountsJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ClearTempMountsJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CommandList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ContextualProcessJob
+
+
+
+
+
+
+
+ CreatePartitionDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreatePartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreatePartitionTableDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreatePartitionTableJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreateUserJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeletePartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInfoWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceModel
+
+
+
+
+
+
+
+ DracutLuksCfgJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DummyCppJob
+
+
+
+
+
+
+
+ EditExistingPartitionDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EncryptWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FillGlobalStorageJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FinishedPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FinishedViewStep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FormatPartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ InteractiveTerminalPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ InteractiveTerminalViewStep
+
+
+
+
+
+
+
+ KeyboardPage
+
+
+
+
+
+
+
+
+
+
+
+
+ KeyboardViewStep
+
+
+
+
+
+
+
+ LCLocaleDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LicensePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %1 is an untranslatable product name, example: Creative Audigy driver
+
+
+
+
+
+ %1 is usually a vendor name, example: Nvidia graphics driver
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LicenseViewStep
+
+
+
+
+
+
+
+ LocalePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Language (Country)
+
+
+
+
+ LocaleViewStep
+
+
+
+
+
+
+
+
+
+
+
+
+ NetInstallPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NetInstallViewStep
+
+
+
+
+
+
+
+ PWQ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page_Keyboard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page_UserSetup
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionLabelsView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionViewStep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PlasmaLnfJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PlasmaLnfPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PlasmaLnfViewStep
+
+
+
+
+
+
+
+ PreserveFiles
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ProcessResult
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ QObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ReplaceWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RequirementsChecker
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResizePartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ScanningDialog
+
+
+
+
+
+
+
+
+
+
+
+
+ SetHostNameJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetKeyboardLayoutJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetPartFlagsJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetPasswordJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetTimezoneJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ShellProcessJob
+
+
+
+
+
+
+
+ SlideCounter
+
+
+
+ slide counter, %1 of %2 (numeric)
+
+
+
+
+ SummaryPage
+
+
+
+
+
+
+
+ SummaryViewStep
+
+
+
+
+
+
+
+ TrackingInstallJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingMachineNeonJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingViewStep
+
+
+
+
+
+
+
+ UsersPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UsersViewStep
+
+
+
+
+
+
+
+ WelcomePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WelcomeViewStep
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lang/python/es_MX/LC_MESSAGES/python.mo b/lang/python/es_MX/LC_MESSAGES/python.mo
index 3b6df235c..b8b639ba0 100644
Binary files a/lang/python/es_MX/LC_MESSAGES/python.mo and b/lang/python/es_MX/LC_MESSAGES/python.mo differ
diff --git a/lang/python/es_MX/LC_MESSAGES/python.po b/lang/python/es_MX/LC_MESSAGES/python.po
index 386952128..45fc72c65 100644
--- a/lang/python/es_MX/LC_MESSAGES/python.po
+++ b/lang/python/es_MX/LC_MESSAGES/python.po
@@ -10,6 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-05-28 04:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: guillermo pacheco , 2018\n"
"Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,39 +20,39 @@ msgstr ""
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
-msgstr ""
+msgstr "Desmontar sistemas de archivo."
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
-msgstr ""
+msgstr "Trabajo python ficticio."
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
-msgstr ""
+msgstr "Paso python ficticio {}"
#: src/modules/machineid/main.py:35
msgid "Generate machine-id."
-msgstr ""
+msgstr "Generar identificación de la maquina."
#: src/modules/packages/main.py:61
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
-msgstr ""
+msgstr "Procesando paquetes (%(count)d/%(total)d)"
#: src/modules/packages/main.py:63 src/modules/packages/main.py:73
msgid "Install packages."
-msgstr ""
+msgstr "Instalar paquetes."
#: src/modules/packages/main.py:66
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Instalando un paquete."
+msgstr[1] "Instalando%(num)d paquetes."
#: src/modules/packages/main.py:69
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Removiendo un paquete."
+msgstr[1] "Removiendo %(num)dpaquetes."
diff --git a/lang/python/et/LC_MESSAGES/python.mo b/lang/python/et/LC_MESSAGES/python.mo
index 89b3804b5..2fea8bab0 100644
Binary files a/lang/python/et/LC_MESSAGES/python.mo and b/lang/python/et/LC_MESSAGES/python.mo differ
diff --git a/lang/python/et/LC_MESSAGES/python.po b/lang/python/et/LC_MESSAGES/python.po
index eeccccc30..ccd9b1b7d 100644
--- a/lang/python/et/LC_MESSAGES/python.po
+++ b/lang/python/et/LC_MESSAGES/python.po
@@ -41,18 +41,18 @@ msgstr "Pakkide töötlemine (%(count)d / %(total)d)"
#: src/modules/packages/main.py:63 src/modules/packages/main.py:73
msgid "Install packages."
-msgstr "Installi pakid."
+msgstr "Paigalda paketid."
#: src/modules/packages/main.py:66
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
-msgstr[0] "Installin ühe paki."
-msgstr[1] "Installin %(num)d pakki."
+msgstr[0] "Paigaldan ühe paketi."
+msgstr[1] "Paigaldan %(num)d paketti."
#: src/modules/packages/main.py:69
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
-msgstr[0] "Eemaldan ühe paki."
-msgstr[1] "Eemaldan %(num)d pakki."
+msgstr[0] "Eemaldan ühe paketi."
+msgstr[1] "Eemaldan %(num)d paketti."
diff --git a/lang/python/ko/LC_MESSAGES/python.mo b/lang/python/ko/LC_MESSAGES/python.mo
new file mode 100644
index 000000000..9dfa007bd
Binary files /dev/null and b/lang/python/ko/LC_MESSAGES/python.mo differ
diff --git a/lang/python/ko/LC_MESSAGES/python.po b/lang/python/ko/LC_MESSAGES/python.po
new file mode 100644
index 000000000..7ac2b3d4d
--- /dev/null
+++ b/lang/python/ko/LC_MESSAGES/python.po
@@ -0,0 +1,55 @@
+# 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 , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-05-28 04:57-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/modules/umount/main.py:40
+msgid "Unmount file systems."
+msgstr ""
+
+#: src/modules/dummypython/main.py:44
+msgid "Dummy python job."
+msgstr ""
+
+#: src/modules/dummypython/main.py:97
+msgid "Dummy python step {}"
+msgstr ""
+
+#: src/modules/machineid/main.py:35
+msgid "Generate machine-id."
+msgstr ""
+
+#: src/modules/packages/main.py:61
+#, python-format
+msgid "Processing packages (%(count)d / %(total)d)"
+msgstr ""
+
+#: src/modules/packages/main.py:63 src/modules/packages/main.py:73
+msgid "Install packages."
+msgstr ""
+
+#: src/modules/packages/main.py:66
+#, python-format
+msgid "Installing one package."
+msgid_plural "Installing %(num)d packages."
+msgstr[0] ""
+
+#: src/modules/packages/main.py:69
+#, python-format
+msgid "Removing one package."
+msgid_plural "Removing %(num)d packages."
+msgstr[0] ""
diff --git a/src/branding/README.md b/src/branding/README.md
index 6503bef49..f85ad8f67 100644
--- a/src/branding/README.md
+++ b/src/branding/README.md
@@ -24,9 +24,11 @@ so that it can be run directly from the build directory for testing purposes:
Since the slideshow can be **any** QML, it is limited only by your designers
imagination and your QML experience. For straightforward presentations,
-see the documentation below. There are more examples in the *calamares-branding*
+see the documentation below. There are more examples in the [calamares-branding][1]
repository.
+[1] https://github.com/calamares/calamares-branding
+
## Translations
QML files in a branding component can be translated. Translations should
diff --git a/src/branding/default/show.qml b/src/branding/default/show.qml
index ad7c92783..b724a4832 100644
--- a/src/branding/default/show.qml
+++ b/src/branding/default/show.qml
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,7 +31,7 @@ Presentation
repeat: true
onTriggered: presentation.goToNextSlide()
}
-
+
Slide {
Image {
diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp
index 2bb0af8df..e41516c60 100644
--- a/src/calamares/CalamaresApplication.cpp
+++ b/src/calamares/CalamaresApplication.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -49,10 +50,10 @@ CalamaresApplication::CalamaresApplication( int& argc, char* argv[] )
// //, so we end up with ~/.cache/Calamares/calamares/
// which is excessively squidly.
//
- // setOrganizationName( QLatin1String( CALAMARES_ORGANIZATION_NAME ) );
- setOrganizationDomain( QLatin1String( CALAMARES_ORGANIZATION_DOMAIN ) );
- setApplicationName( QLatin1String( CALAMARES_APPLICATION_NAME ) );
- setApplicationVersion( QLatin1String( CALAMARES_VERSION ) );
+ // setOrganizationName( QStringLiteral( CALAMARES_ORGANIZATION_NAME ) );
+ setOrganizationDomain( QStringLiteral( CALAMARES_ORGANIZATION_DOMAIN ) );
+ setApplicationName( QStringLiteral( CALAMARES_APPLICATION_NAME ) );
+ setApplicationVersion( QStringLiteral( CALAMARES_VERSION ) );
cDebug() << "Calamares version:" << CALAMARES_VERSION;
@@ -335,6 +336,8 @@ CalamaresApplication::initView()
connect( m_moduleManager, &Calamares::ModuleManager::modulesLoaded,
this, &CalamaresApplication::initViewSteps );
+ connect( m_moduleManager, &Calamares::ModuleManager::modulesFailed,
+ this, &CalamaresApplication::initFailed );
m_moduleManager->loadModules();
@@ -356,6 +359,12 @@ CalamaresApplication::initViewSteps()
cDebug() << "STARTUP: Window now visible and ProgressTreeView populated";
}
+void
+CalamaresApplication::initFailed(const QStringList& l)
+{
+ cError() << "STARTUP: failed modules are" << l;
+ m_mainwindow->show();
+}
void
CalamaresApplication::initJobQueue()
diff --git a/src/calamares/CalamaresApplication.h b/src/calamares/CalamaresApplication.h
index 3cfd4f79f..f9c919aa6 100644
--- a/src/calamares/CalamaresApplication.h
+++ b/src/calamares/CalamaresApplication.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -70,6 +71,7 @@ public:
private slots:
void initView();
void initViewSteps();
+ void initFailed( const QStringList& l );
private:
void initQmlPath();
diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp
index 1c1ba2181..d4bd2743d 100644
--- a/src/calamares/main.cpp
+++ b/src/calamares/main.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/Job.h b/src/libcalamares/Job.h
index 6063633b8..040ead6ad 100644
--- a/src/libcalamares/Job.h
+++ b/src/libcalamares/Job.h
@@ -66,8 +66,15 @@ public:
virtual QString prettyDescription() const;
virtual QString prettyStatusMessage() const;
virtual JobResult exec() = 0;
+
+ bool isEmergency() const { return m_emergency; }
+ void setEmergency( bool e ) { m_emergency = e; }
+
signals:
void progress( qreal percent );
+
+private:
+ bool m_emergency = false;
};
} // namespace Calamares
diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp
index 339fd8457..46d58d429 100644
--- a/src/libcalamares/JobQueue.cpp
+++ b/src/libcalamares/JobQueue.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -50,22 +51,36 @@ public:
void run() override
{
+ bool anyFailed = false;
+ QString message;
+ QString details;
+
m_jobIndex = 0;
for( auto job : m_jobs )
{
+ if ( anyFailed && !job->isEmergency() )
+ {
+ cDebug() << "Skipping non-emergency job" << job->prettyName();
+ continue;
+ }
+
emitProgress();
- cDebug() << "Starting job" << job->prettyName();
+ cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName();
connect( job.data(), &Job::progress, this, &JobThread::emitProgress );
JobResult result = job->exec();
- if ( !result )
+ if ( !anyFailed && !result )
{
- emitFailed( result.message(), result.details() );
- emitFinished();
- return;
+ anyFailed = true;
+ message = result.message();
+ details = result.details();
}
- ++m_jobIndex;
+ if ( !anyFailed )
+ ++m_jobIndex;
}
- emitProgress();
+ if ( anyFailed )
+ emitFailed( message, details );
+ else
+ emitProgress();
emitFinished();
}
diff --git a/src/libcalamares/ProcessJob.cpp b/src/libcalamares/ProcessJob.cpp
index 55e25254c..3cf4eec49 100644
--- a/src/libcalamares/ProcessJob.cpp
+++ b/src/libcalamares/ProcessJob.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/ProcessJob.h b/src/libcalamares/ProcessJob.h
index 59a532023..d01dbb676 100644
--- a/src/libcalamares/ProcessJob.h
+++ b/src/libcalamares/ProcessJob.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/PythonHelper.cpp b/src/libcalamares/PythonHelper.cpp
index e5eb85084..d6001055e 100644
--- a/src/libcalamares/PythonHelper.cpp
+++ b/src/libcalamares/PythonHelper.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/PythonHelper.h b/src/libcalamares/PythonHelper.h
index d48e5eaab..693d80d8b 100644
--- a/src/libcalamares/PythonHelper.h
+++ b/src/libcalamares/PythonHelper.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp
index 92dbedef9..65a5c4506 100644
--- a/src/libcalamares/PythonJob.cpp
+++ b/src/libcalamares/PythonJob.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/PythonJobApi.cpp b/src/libcalamares/PythonJobApi.cpp
index a5bae6149..f540c2683 100644
--- a/src/libcalamares/PythonJobApi.cpp
+++ b/src/libcalamares/PythonJobApi.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/PythonJobApi.h b/src/libcalamares/PythonJobApi.h
index 0e68d7936..a19a0581b 100644
--- a/src/libcalamares/PythonJobApi.h
+++ b/src/libcalamares/PythonJobApi.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp
index 732afa8d8..80f6836bb 100644
--- a/src/libcalamares/Settings.cpp
+++ b/src/libcalamares/Settings.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,6 +30,32 @@
#include
+/** Helper function to grab a QString out of the config, and to warn if not present. */
+static QString
+requireString( const YAML::Node& config, const char* key )
+{
+ if ( config[ key ] )
+ return QString::fromStdString( config[ key ].as< std::string >() );
+ else
+ {
+ cWarning() << "Required settings.conf key" << key << "is missing.";
+ return QString();
+ }
+}
+
+/** Helper function to grab a bool out of the config, and to warn if not present. */
+static bool
+requireBool( const YAML::Node& config, const char* key, bool d )
+{
+ if ( config[ key ] )
+ return config[ key ].as< bool >();
+ else
+ {
+ cWarning() << "Required settings.conf key" << key << "is missing.";
+ return d;
+ }
+}
+
namespace Calamares
{
@@ -41,7 +67,6 @@ Settings::instance()
return s_instance;
}
-
Settings::Settings( const QString& settingsFilePath,
bool debugMode,
QObject* parent )
@@ -148,11 +173,9 @@ Settings::Settings( const QString& settingsFilePath,
}
}
- m_brandingComponentName = QString::fromStdString( config[ "branding" ]
- .as< std::string >() );
- m_promptInstall = config[ "prompt-install" ].as< bool >();
-
- m_doChroot = config[ "dont-chroot" ] ? !config[ "dont-chroot" ].as< bool >() : true;
+ m_brandingComponentName = requireString( config, "branding" );
+ m_promptInstall = requireBool( config, "prompt-install", false );
+ m_doChroot = requireBool( config, "dont-chroot", true );
}
catch ( YAML::Exception& e )
{
@@ -175,7 +198,7 @@ Settings::modulesSearchPaths() const
}
-QList >
+Settings::InstanceDescriptionList
Settings::customModuleInstances() const
{
return m_customModuleInstances;
diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h
index 42720b986..2330f5747 100644
--- a/src/libcalamares/Settings.h
+++ b/src/libcalamares/Settings.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -43,7 +43,9 @@ public:
QStringList modulesSearchPaths() const;
- QList< QMap< QString, QString > > customModuleInstances() const;
+ using InstanceDescription = QMap< QString, QString >;
+ using InstanceDescriptionList = QList< InstanceDescription >;
+ InstanceDescriptionList customModuleInstances() const;
QList< QPair< ModuleAction, QStringList > > modulesSequence() const;
@@ -60,7 +62,7 @@ private:
QStringList m_modulesSearchPaths;
- QList< QMap< QString, QString > > m_customModuleInstances;
+ InstanceDescriptionList m_customModuleInstances;
QList< QPair< ModuleAction, QStringList > > m_modulesSequence;
QString m_brandingComponentName;
diff --git a/src/libcalamares/utils/CalamaresUtils.cpp b/src/libcalamares/utils/CalamaresUtils.cpp
index dde3f9a13..6a892511a 100644
--- a/src/libcalamares/utils/CalamaresUtils.cpp
+++ b/src/libcalamares/utils/CalamaresUtils.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2013-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Originally from Tomahawk, portions:
* Copyright 2010-2011, Christian Muehlhaeuser
@@ -33,11 +34,9 @@
#include
#include
-
-// stdc++
#include
-using namespace std;
+using std::cerr;
namespace CalamaresUtils
{
diff --git a/src/libcalamares/utils/CalamaresUtils.h b/src/libcalamares/utils/CalamaresUtils.h
index 13caf1cad..e64fe4eec 100644
--- a/src/libcalamares/utils/CalamaresUtils.h
+++ b/src/libcalamares/utils/CalamaresUtils.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2013-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Originally from Tomahawk, portions:
* Copyright 2010-2011, Christian Muehlhaeuser
diff --git a/src/libcalamares/utils/PluginFactory.cpp b/src/libcalamares/utils/PluginFactory.cpp
index d53b6474f..124af16f4 100644
--- a/src/libcalamares/utils/PluginFactory.cpp
+++ b/src/libcalamares/utils/PluginFactory.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Based on KPluginFactory from KCoreAddons, KDE project
* Copyright 2007, Matthias Kretz
diff --git a/src/libcalamares/utils/PluginFactory.h b/src/libcalamares/utils/PluginFactory.h
index 0ca7917c4..22966b829 100644
--- a/src/libcalamares/utils/PluginFactory.h
+++ b/src/libcalamares/utils/PluginFactory.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Based on KPluginFactory from KCoreAddons, KDE project
* Copyright 2007, Matthias Kretz
@@ -111,7 +111,7 @@ namespace Calamares
* T(QObject *parent, const QVariantList &args)
* \endcode
*
- * You should typically use CALAMARES_PLUGIN_FACTORY_DEFINITION() in your plugin code to
+ * You should typically use CALAMARES_PLUGIN_FACTORY_DEFINITION() in your plugin code to
* create the factory. The pattern is
*
* \code
diff --git a/src/libcalamaresui/Branding.cpp b/src/libcalamaresui/Branding.cpp
index c71b1daa5..086e20b7d 100644
--- a/src/libcalamaresui/Branding.cpp
+++ b/src/libcalamaresui/Branding.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt
index 6bbb285bb..efd0ebb29 100644
--- a/src/libcalamaresui/CMakeLists.txt
+++ b/src/libcalamaresui/CMakeLists.txt
@@ -15,6 +15,7 @@ set( calamaresui_SOURCES
utils/qjsonitem.cpp
viewpages/AbstractPage.cpp
+ viewpages/BlankViewStep.cpp
viewpages/ViewStep.cpp
widgets/ClickableLabel.cpp
diff --git a/src/libcalamaresui/ExecutionViewStep.cpp b/src/libcalamaresui/ExecutionViewStep.cpp
index 109bd1384..b505102a4 100644
--- a/src/libcalamaresui/ExecutionViewStep.cpp
+++ b/src/libcalamaresui/ExecutionViewStep.cpp
@@ -21,6 +21,7 @@
#include
#include "Branding.h"
+#include "Job.h"
#include "JobQueue.h"
#include "modulesystem/Module.h"
#include "modulesystem/ModuleManager.h"
@@ -142,7 +143,15 @@ ExecutionViewStep::onActivate()
Calamares::Module* module = Calamares::ModuleManager::instance()
->moduleInstance( instanceKey );
if ( module )
- queue->enqueue( module->jobs() );
+ {
+ auto jl = module->jobs();
+ if ( module->isEmergency() )
+ {
+ for( auto& j : jl )
+ j->setEmergency( true );
+ }
+ queue->enqueue( jl );
+ }
}
queue->start();
diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp
index e597bf6a3..2b9f87db8 100644
--- a/src/libcalamaresui/ViewManager.cpp
+++ b/src/libcalamaresui/ViewManager.cpp
@@ -20,6 +20,7 @@
#include "ViewManager.h"
#include "utils/Logger.h"
+#include "viewpages/BlankViewStep.h"
#include "viewpages/ViewStep.h"
#include "ExecutionViewStep.h"
#include "JobQueue.h"
@@ -172,6 +173,27 @@ ViewManager::onInstallationFailed( const QString& message, const QString& detail
}
+void
+ViewManager::onInitFailed( const QStringList& modules)
+{
+ QString title( tr( "Calamares Initialization Failed" ) );
+ QString description( tr( "%1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution." ) );
+ QString detailString;
+
+ if ( modules.count() > 0 )
+ {
+ description.append( tr( " The following modules could not be loaded:" ) );
+ QStringList details;
+ details << QLatin1Literal("
");
+ detailString = details.join( QString() );
+ }
+
+ insertViewStep( 0, new BlankViewStep( title, description.arg( *Calamares::Branding::ShortProductName ), detailString ) );
+}
+
ViewStepList
ViewManager::viewSteps() const
{
diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h
index e4f215f8f..ee199f725 100644
--- a/src/libcalamaresui/ViewManager.h
+++ b/src/libcalamaresui/ViewManager.h
@@ -117,6 +117,12 @@ public slots:
*/
void onInstallationFailed( const QString& message, const QString& details );
+ /** @brief Replaces the stack with a view step stating that initialization failed.
+ *
+ * @param modules a list of failed modules.
+ */
+ void onInitFailed( const QStringList& modules );
+
signals:
void currentStepChanged();
void enlarge( QSize enlarge ) const; // See ViewStep::enlarge()
diff --git a/src/libcalamaresui/modulesystem/Module.cpp b/src/libcalamaresui/modulesystem/Module.cpp
index 05394e69f..9b3be877f 100644
--- a/src/libcalamaresui/modulesystem/Module.cpp
+++ b/src/libcalamaresui/modulesystem/Module.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -52,6 +52,8 @@ name: "foo" #the module name. must be unique and same as the parent di
interface: "qtplugin" #can be: qtplugin, python, process, ...
*/
+static const char EMERGENCY[] = "emergency";
+
namespace Calamares
{
@@ -64,7 +66,7 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
const QString& configFileName,
const QString& moduleDirectory )
{
- Module* m = nullptr;
+ std::unique_ptr m;
QString typeString = moduleDescriptor.value( "type" ).toString();
QString intfString = moduleDescriptor.value( "interface" ).toString();
@@ -79,12 +81,12 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
{
if ( intfString == "qtplugin" )
{
- m = new ViewModule();
+ m.reset( new ViewModule() );
}
else if ( intfString == "pythonqt" )
{
#ifdef WITH_PYTHONQT
- m = new PythonQtViewModule();
+ m.reset( new PythonQtViewModule() );
#else
cError() << "PythonQt view modules are not supported in this version of Calamares.";
#endif
@@ -96,16 +98,16 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
{
if ( intfString == "qtplugin" )
{
- m = new CppJobModule();
+ m.reset( new CppJobModule() );
}
else if ( intfString == "process" )
{
- m = new ProcessJobModule();
+ m.reset( new ProcessJobModule() );
}
else if ( intfString == "python" )
{
#ifdef WITH_PYTHON
- m = new PythonJobModule();
+ m.reset( new PythonJobModule() );
#else
cError() << "Python modules are not supported in this version of Calamares.";
#endif
@@ -130,7 +132,6 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
else
{
cError() << "Bad module directory" << moduleDirectory << "for" << instanceId;
- delete m;
return nullptr;
}
@@ -144,10 +145,9 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
catch ( YAML::Exception& e )
{
cError() << "YAML parser error " << e.what();
- delete m;
return nullptr;
}
- return m;
+ return m.release();
}
@@ -200,6 +200,9 @@ Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Ex
}
m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ).toMap();
+ m_emergency = m_maybe_emergency
+ && m_configurationMap.contains( EMERGENCY )
+ && m_configurationMap[ EMERGENCY ].toBool();
return;
}
else
@@ -276,13 +279,6 @@ Module::interfaceString() const
}
-bool
-Module::isLoaded() const
-{
- return m_loaded;
-}
-
-
QVariantMap
Module::configurationMap()
{
@@ -299,6 +295,11 @@ void
Module::initFrom( const QVariantMap& moduleDescriptor )
{
m_name = moduleDescriptor.value( "name" ).toString();
+
+ if ( moduleDescriptor.contains( EMERGENCY ) )
+ {
+ m_maybe_emergency = moduleDescriptor[ EMERGENCY ].toBool();
+ }
}
} //ns
diff --git a/src/libcalamaresui/modulesystem/Module.h b/src/libcalamaresui/modulesystem/Module.h
index 896d3b597..4fd0020f8 100644
--- a/src/libcalamaresui/modulesystem/Module.h
+++ b/src/libcalamaresui/modulesystem/Module.h
@@ -147,7 +147,7 @@ public:
* @brief isLoaded reports on the loaded status of a module.
* @return true if the module's loading phase has finished, otherwise false.
*/
- virtual bool isLoaded() const;
+ bool isLoaded() const { return m_loaded; }
/**
* @brief loadSelf initialized the module.
@@ -155,6 +155,17 @@ public:
*/
virtual void loadSelf() = 0;
+ /**
+ * @brief Is this an emergency module?
+ *
+ * An emergency module is run even if an error occurs
+ * which would terminate Calamares earlier in the same
+ * *exec* block. Emergency modules in later exec blocks
+ * are not run (in the common case where there is only
+ * one exec block, this doesn't really matter).
+ */
+ bool isEmergency() const { return m_emergency; }
+
/**
* @brief jobs returns any jobs exposed by this module.
* @return a list of jobs (can be empty).
@@ -171,11 +182,15 @@ public:
protected:
explicit Module();
virtual void initFrom( const QVariantMap& moduleDescriptor );
- bool m_loaded;
QVariantMap m_configurationMap;
+ bool m_loaded = false;
+ bool m_emergency = false; // Based on module and local config
+ bool m_maybe_emergency = false; // Based on the module.desc
+
private:
void loadConfigurationFile( const QString& configFileName ); //throws YAML::Exception
+
QString m_name;
QStringList m_requiredModules;
QString m_directory;
diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp
index 83273e924..6d13c9564 100644
--- a/src/libcalamaresui/modulesystem/ModuleManager.cpp
+++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -154,12 +155,33 @@ ModuleManager::moduleInstance( const QString& instanceKey )
}
+/**
+ * @brief Search a list of instance descriptions for one matching @p module and @p id
+ *
+ * @return -1 on failure, otherwise index of the instance that matches.
+ */
+static int findCustomInstance( const Settings::InstanceDescriptionList& customInstances,
+ const QString& module,
+ const QString& id )
+{
+ for ( int i = 0; i < customInstances.count(); ++i )
+ {
+ const auto& thisInstance = customInstances[ i ];
+ if ( thisInstance.value( "module" ) == module &&
+ thisInstance.value( "id" ) == id )
+ return i;
+ }
+ return -1;
+}
+
+
void
ModuleManager::loadModules()
{
QTimer::singleShot( 0, this, [ this ]()
{
- QList< QMap< QString, QString > > customInstances =
+ QStringList failedModules;
+ Settings::InstanceDescriptionList customInstances =
Settings::instance()->customModuleInstances();
const auto modulesSequence = Settings::instance()->modulesSequence();
@@ -177,10 +199,9 @@ ModuleManager::loadModules()
if ( moduleEntrySplit.length() < 1 ||
moduleEntrySplit.length() > 2 )
{
- cError() << "Wrong module entry format for module" << moduleEntry << '.';
- cError() << "Calamares will now quit.";
- qApp->exit( 1 );
- return;
+ cError() << "Wrong module entry format for module" << moduleEntry;
+ failedModules.append( moduleEntry );
+ continue;
}
moduleName = moduleEntrySplit.first();
instanceId = moduleEntrySplit.last();
@@ -191,37 +212,21 @@ ModuleManager::loadModules()
{
cError() << "Module" << moduleName << "not found in module search paths."
<< Logger::DebugList( m_paths );
- cError() << "Calamares will now quit.";
- qApp->exit( 1 );
- return;
+ failedModules.append( moduleName );
+ continue;
}
- auto findCustomInstance =
- [ customInstances ]( const QString& module,
- const QString& id) -> int
- {
- for ( int i = 0; i < customInstances.count(); ++i )
- {
- auto thisInstance = customInstances[ i ];
- if ( thisInstance.value( "module" ) == module &&
- thisInstance.value( "id" ) == id )
- return i;
- }
- return -1;
- };
-
if ( moduleName != instanceId ) //means this is a custom instance
{
- if ( findCustomInstance( moduleName, instanceId ) > -1 )
+ if ( int found = findCustomInstance( customInstances, moduleName, instanceId ) > -1 )
{
- configFileName = customInstances[ findCustomInstance( moduleName, instanceId ) ].value( "config" );
+ configFileName = customInstances[ found ].value( "config" );
}
else //ought to be a custom instance, but cannot find instance entry
{
cError() << "Custom instance" << moduleEntry << "not found in custom instances section.";
- cError() << "Calamares will now quit.";
- qApp->exit( 1 );
- return;
+ failedModules.append( moduleEntry );
+ continue;
}
}
@@ -241,10 +246,9 @@ ModuleManager::loadModules()
m_loadedModulesByInstanceKey.value( instanceKey, nullptr );
if ( thisModule && !thisModule->isLoaded() )
{
- cError() << "Module" << instanceKey << "exists but not loaded."
- << "\nCalamares will now quit.";
- qApp->exit( 1 );
- return;
+ cError() << "Module" << instanceKey << "exists but not loaded.";
+ failedModules.append( instanceKey );
+ continue;
}
if ( thisModule && thisModule->isLoaded() )
@@ -260,8 +264,8 @@ ModuleManager::loadModules()
m_moduleDirectoriesByModuleName.value( moduleName ) );
if ( !thisModule )
{
- cWarning() << "Module" << instanceKey << "cannot be created from descriptor.";
- Q_ASSERT( thisModule );
+ cError() << "Module" << instanceKey << "cannot be created from descriptor" << configFileName;
+ failedModules.append( instanceKey );
continue;
}
// If it's a ViewModule, it also appends the ViewStep to the ViewManager.
@@ -269,8 +273,8 @@ ModuleManager::loadModules()
m_loadedModulesByInstanceKey.insert( instanceKey, thisModule );
if ( !thisModule->isLoaded() )
{
- cWarning() << "Module" << moduleName << "loading FAILED";
- Q_ASSERT( thisModule->isLoaded() );
+ cError() << "Module" << instanceKey << "loading FAILED.";
+ failedModules.append( instanceKey );
continue;
}
}
@@ -292,7 +296,13 @@ ModuleManager::loadModules()
}
}
}
- emit modulesLoaded();
+ if ( !failedModules.isEmpty() )
+ {
+ ViewManager::instance()->onInitFailed( failedModules );
+ emit modulesFailed( failedModules );
+ }
+ else
+ emit modulesLoaded();
} );
}
diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h
index ed7700c40..eff09b321 100644
--- a/src/libcalamaresui/modulesystem/ModuleManager.h
+++ b/src/libcalamaresui/modulesystem/ModuleManager.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -82,7 +83,8 @@ public:
signals:
void initDone();
- void modulesLoaded();
+ void modulesLoaded(); /// All of the modules were loaded successfully
+ void modulesFailed( QStringList ); /// .. or not
private slots:
void doInit();
diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp
index 486d9a8e2..b667b6a81 100644
--- a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp
+++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp
@@ -1,6 +1,8 @@
/* === This file is part of Calamares - ===
*
* Copyright 2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
+ * Copyright 2018, Raul Rodrigo Segura
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -95,6 +97,9 @@ PythonQtViewModule::loadSelf()
s_utils = new ::Utils( Calamares::JobQueue::instance()->globalStorage() );
cala.addObject( "utils", s_utils );
+ // Append configuration object, in module PythonQt.calamares
+ cala.addVariable("configuration", m_configurationMap);
+
// Basic stdout/stderr handling
QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut,
[]( const QString& message )
diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp
index 1f940b30b..492d58fda 100644
--- a/src/libcalamaresui/modulesystem/ViewModule.cpp
+++ b/src/libcalamaresui/modulesystem/ViewModule.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -52,27 +52,32 @@ ViewModule::loadSelf()
PluginFactory* pf = qobject_cast< PluginFactory* >( m_loader->instance() );
if ( !pf )
{
- cDebug() << Q_FUNC_INFO << "No factory:" << m_loader->errorString();
+ cWarning() << Q_FUNC_INFO << "No factory:" << m_loader->errorString();
return;
}
m_viewStep = pf->create< Calamares::ViewStep >();
if ( !m_viewStep )
{
- cDebug() << Q_FUNC_INFO << "create() failed" << m_loader->errorString();
+ cWarning() << Q_FUNC_INFO << "create() failed" << m_loader->errorString();
return;
}
-// cDebug() << "ViewModule loading self for instance" << instanceKey()
-// << "\nViewModule at address" << this
-// << "\nCalamares::PluginFactory at address" << pf
-// << "\nViewStep at address" << m_viewStep;
+ }
+ // TODO: allow internal view steps to be created here; they would
+ // have to be linked into the main application somehow.
+
+ // If any method created the view step, use it now.
+ if ( m_viewStep )
+ {
m_viewStep->setModuleInstanceKey( instanceKey() );
m_viewStep->setConfigurationMap( m_configurationMap );
ViewManager::instance()->addViewStep( m_viewStep );
m_loaded = true;
cDebug() << "ViewModule" << instanceKey() << "loading complete.";
}
+ else
+ cWarning() << Q_FUNC_INFO << "No view step was created";
}
diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp
index b05d4ea4f..425ee1811 100644
--- a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp
+++ b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -226,10 +226,20 @@ defaultFont()
}
+QFont
+largeFont()
+{
+ QFont f;
+ f.setPointSize( defaultFontSize() + 4 );
+ return f;
+}
+
+
void
setDefaultFontSize( int points )
{
s_defaultFontSize = points;
+ s_defaultFontHeight = 0; // Recalculate on next call to defaultFontHeight()
}
diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.h b/src/libcalamaresui/utils/CalamaresUtilsGui.h
index c0905d4d0..4b041466d 100644
--- a/src/libcalamaresui/utils/CalamaresUtilsGui.h
+++ b/src/libcalamaresui/utils/CalamaresUtilsGui.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -115,6 +115,7 @@ UIDLLEXPORT void setDefaultFontSize( int points );
UIDLLEXPORT int defaultFontSize(); // in points
UIDLLEXPORT int defaultFontHeight(); // in pixels, DPI-specific
UIDLLEXPORT QFont defaultFont();
+UIDLLEXPORT QFont largeFont();
UIDLLEXPORT QSize defaultIconSize();
/**
diff --git a/src/libcalamaresui/viewpages/BlankViewStep.cpp b/src/libcalamaresui/viewpages/BlankViewStep.cpp
new file mode 100644
index 000000000..243305c1f
--- /dev/null
+++ b/src/libcalamaresui/viewpages/BlankViewStep.cpp
@@ -0,0 +1,118 @@
+/* === This file is part of Calamares - ===
+ *
+ * Copyright 2018, Adriaan de Groot
+ *
+ * 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 .
+ */
+#include "BlankViewStep.h"
+
+#include "utils/CalamaresUtilsGui.h"
+
+#include
+#include
+#include
+
+namespace Calamares
+{
+
+BlankViewStep::BlankViewStep( const QString& title, const QString& description, const QString& details, QObject* parent)
+ : Calamares::ViewStep( parent )
+ , m_widget( new QWidget() )
+{
+ QBoxLayout* layout = new QVBoxLayout();
+
+ constexpr int const marginWidth = 10;
+ constexpr int const spacingHeight = 10;
+
+ auto* label = new QLabel( title );
+ label->setAlignment( Qt::AlignHCenter );
+ label->setFont( CalamaresUtils::largeFont() );
+ layout->addWidget( label );
+
+ label = new QLabel( description );
+ label->setWordWrap( true );
+ label->setMargin( marginWidth );
+ layout->addSpacing( spacingHeight );
+ layout->addWidget( label );
+
+ if ( !details.isEmpty() )
+ {
+ label = new QLabel( details );
+ label->setMargin( marginWidth );
+ layout->addSpacing( spacingHeight );
+ layout->addWidget( label );
+ }
+
+ layout->addStretch( 1 ); // Push the rest to the top
+
+ m_widget->setLayout( layout );
+}
+
+BlankViewStep::~BlankViewStep()
+{
+}
+
+QString
+BlankViewStep::prettyName() const
+{
+ return tr( "Blank Page" );
+}
+
+void
+BlankViewStep::back()
+{
+}
+
+void
+BlankViewStep::next()
+{
+}
+
+bool
+BlankViewStep::isBackEnabled() const
+{
+ return false;
+}
+
+bool
+BlankViewStep::isNextEnabled() const
+{
+ return false;
+}
+
+bool
+BlankViewStep::isAtBeginning() const
+{
+ return true;
+}
+
+bool
+BlankViewStep::isAtEnd() const
+{
+ return false;
+}
+
+QWidget*
+BlankViewStep::widget()
+{
+ return m_widget;
+}
+
+Calamares::JobList
+BlankViewStep::jobs() const
+{
+ return JobList();
+}
+
+} // namespace
diff --git a/src/libcalamaresui/viewpages/BlankViewStep.h b/src/libcalamaresui/viewpages/BlankViewStep.h
new file mode 100644
index 000000000..a3f46d1d5
--- /dev/null
+++ b/src/libcalamaresui/viewpages/BlankViewStep.h
@@ -0,0 +1,65 @@
+/* === This file is part of Calamares - ===
+ *
+ * Copyright 2018, Adriaan de Groot
+ *
+ * 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 .
+ */
+
+#ifndef BLANKVIEWSTEP_H
+#define BLANKVIEWSTEP_H
+
+#include
+
+#include
+#include
+
+class QWidget;
+
+namespace Calamares
+{
+
+/** @brief A "blank" view step, used for error and status reporting
+ *
+ * This view step never allows navigation (forward or back); it's a trap.
+ * It displays a title and explanation, and optional details.
+ */
+class BlankViewStep : public Calamares::ViewStep
+{
+ Q_OBJECT
+
+public:
+ explicit BlankViewStep( const QString& title, const QString& description, const QString& details = QString(), QObject* parent = nullptr );
+ virtual ~BlankViewStep() override;
+
+ QString prettyName() const override;
+
+ QWidget* widget() override;
+
+ void next() override;
+ void back() override;
+
+ bool isNextEnabled() const override;
+ bool isBackEnabled() const override;
+
+ bool isAtBeginning() const override;
+ bool isAtEnd() const override;
+
+ Calamares::JobList jobs() const override;
+
+private:
+ QWidget* m_widget;
+};
+
+} // namespace
+#endif // BLANKVIEWSTEP_H
diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp
index 72e434780..4915fe120 100644
--- a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp
+++ b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt
index 7f93c555a..514d6b4f6 100644
--- a/src/modules/CMakeLists.txt
+++ b/src/modules/CMakeLists.txt
@@ -6,7 +6,7 @@ set( LIST_SKIPPED_MODULES "" )
if( BUILD_TESTING )
add_executable( test_conf test_conf.cpp )
- target_link_libraries( test_conf ${YAMLCPP_LIBRARY} )
+ target_link_libraries( test_conf ${YAMLCPP_LIBRARY} Qt5::Core )
target_include_directories( test_conf PUBLIC ${YAMLCPP_INCLUDE_DIR} )
endif()
diff --git a/src/modules/README.md b/src/modules/README.md
index a2ec06144..bd6cd4e37 100644
--- a/src/modules/README.md
+++ b/src/modules/README.md
@@ -43,15 +43,21 @@ module's name, type, interface and possibly other properties. The name
of the module as defined in `module.desc` must be the same as the name
of the module's directory.
-Module descriptors must have the following keys:
+Module descriptors **must** have the following keys:
- *name* (an identifier; must be the same as the directory name)
- *type* ("job" or "view")
- *interface* (see below for the different interfaces; generally we
refer to the kinds of modules by their interface)
+Module descriptors **may** have the following keys:
+- *required* **unimplemented** (a list of modules which are required for this module
+ to operate properly)
+- *emergency* (a boolean value, set to true to mark the module
+ as an emergency module)
+
## Module-specific configuration
-A Calamares module *may* read a module configuration file,
+A Calamares module **may** read a module configuration file,
named `.conf`. If such a file is present in the
module's directory, it is shipped as a *default* configuration file.
The module configuration file, if it exists, is a YAML 1.2 document
@@ -125,3 +131,23 @@ while the module type must be "job" or "jobmodule".
The key *command* should have a string as value, which is passed to the
shell -- remember to quote it properly.
+## Emergency Modules
+
+Only C++ modules and job modules may be emergency modules. If, during an
+*exec* step in the sequence, a module fails, installation as a whole fails
+and the install is aborted. If there are emergency modules in the **same**
+exec block, those will be executed before the installation is aborted.
+Non-emergency modules are not executed.
+
+If an emergency-module fails while processing emergency-modules for
+another failed module, that failure is ignored and emergency-module
+processing continues.
+
+Use the EMERGENCY keyword in the CMake description of a C++ module
+to generate a suitable `module.desc`.
+
+A module that is marked as an emergency module in its module.desc
+must **also** set the *emergency* key to *true* in its configuration file.
+If it does not, the module is not considered to be an emergency module
+after all (this is so that you can have modules that have several
+instances, only some of which are actually needed for emergencies.
diff --git a/src/modules/bootloader/bootloader.conf b/src/modules/bootloader/bootloader.conf
index 43e8d6f79..cd021de29 100644
--- a/src/modules/bootloader/bootloader.conf
+++ b/src/modules/bootloader/bootloader.conf
@@ -1,6 +1,9 @@
+# Bootloader configuration. The bootloader is installed to allow
+# the system to start (and pick one of the installed operating
+# systems to run).
---
# Define which bootloader you want to use for EFI installations
-# Possible options are 'grub' and 'systemd-boot'.
+# Possible options are 'grub', 'sb-shim' and 'systemd-boot'.
efiBootLoader: "grub"
# systemd-boot configuration files settings, set kernel and initramfs file names
@@ -17,9 +20,13 @@ fallbackKernelLine: ", with _manjaro_kernel_ (fallback initramfs)"
# GRUB 2 binary names and boot directory
# Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names.
+# These names are also used when using sb-shim, since that needs some
+# GRUB functionality (notably grub-probe) to work.
+#
grubInstall: "grub-install"
grubMkconfig: "grub-mkconfig"
grubCfg: "/boot/grub/grub.cfg"
+grubProbe: "/usr/sbin/grub2-probe"
# Optionally set the bootloader ID to use for EFI. This is passed to
# grub-install --bootloader-id.
@@ -29,8 +36,8 @@ grubCfg: "/boot/grub/grub.cfg"
#
# The ID is also used as a directory name within the EFI environment,
# and the bootloader is copied from /boot/efi/EFI// . When
-# setting the option here, take care to use only valid directory
-# names since no sanitizing is done.
+# setting the option here, keep in mind that the name is sanitized
+# (problematic characters, see above, are replaced).
#
# efiBootloaderId: "dirname"
diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py
index db062da52..1abee68f7 100644
--- a/src/modules/bootloader/main.py
+++ b/src/modules/bootloader/main.py
@@ -167,6 +167,30 @@ def create_loader(loader_path):
loader_file.write(line)
+def efi_label():
+ if "efiBootloaderId" in libcalamares.job.configuration:
+ efi_bootloader_id = libcalamares.job.configuration[
+ "efiBootloaderId"]
+ else:
+ branding = libcalamares.globalstorage.value("branding")
+ efi_bootloader_id = branding["bootloaderEntryName"]
+
+ file_name_sanitizer = str.maketrans(" /", "_-")
+ return efi_bootloader_id.translate(file_name_sanitizer)
+
+
+def efi_word_size():
+ # get bitness of the underlying UEFI
+ try:
+ sysfile = open("/sys/firmware/efi/fw_platform_size", "r")
+ efi_bitness = sysfile.read(2)
+ except Exception:
+ # if the kernel is older than 4.0, the UEFI bitness likely isn't
+ # exposed to the userspace so we assume a 64 bit UEFI here
+ efi_bitness = "64"
+ return efi_bitness
+
+
def install_systemd_boot(efi_directory):
"""
Installs systemd-boot as bootloader for EFI setups.
@@ -218,22 +242,8 @@ def install_grub(efi_directory, fw_type):
if not os.path.isdir(install_efi_directory):
os.makedirs(install_efi_directory)
- if "efiBootloaderId" in libcalamares.job.configuration:
- efi_bootloader_id = libcalamares.job.configuration[
- "efiBootloaderId"]
- else:
- branding = libcalamares.globalstorage.value("branding")
- distribution = branding["bootloaderEntryName"]
- file_name_sanitizer = str.maketrans(" /", "_-")
- efi_bootloader_id = distribution.translate(file_name_sanitizer)
- # get bitness of the underlying UEFI
- try:
- sysfile = open("/sys/firmware/efi/fw_platform_size", "r")
- efi_bitness = sysfile.read(2)
- except Exception:
- # if the kernel is older than 4.0, the UEFI bitness likely isn't
- # exposed to the userspace so we assume a 64 bit UEFI here
- efi_bitness = "64"
+ efi_bootloader_id = efi_label()
+ efi_bitness = efi_word_size()
if efi_bitness == "32":
efi_target = "i386-efi"
@@ -299,6 +309,57 @@ def install_grub(efi_directory, fw_type):
"-o", libcalamares.job.configuration["grubCfg"]])
+def install_secureboot(efi_directory):
+ """
+ Installs the secureboot shim in the system by calling efibootmgr.
+ """
+ efi_bootloader_id = efi_label()
+
+ install_path = libcalamares.globalstorage.value("rootMountPoint")
+ install_efi_directory = install_path + efi_directory
+
+ if efi_word_size() == "64":
+ install_efi_bin = "shim64.efi"
+ else:
+ install_efi_bin = "shim.efi"
+
+ # Copied, roughly, from openSUSE's install script,
+ # and pythonified. *disk* is something like /dev/sda,
+ # while *drive* may return "(disk/dev/sda,gpt1)" ..
+ # we're interested in the numbers in the second part
+ # of that tuple.
+ efi_drive = subprocess.check_output([
+ libcalamares.job.configuration["grubProbe"],
+ "-t", "drive", "--device-map=", install_efi_directory])
+ efi_disk = subprocess.check_output([
+ libcalamares.job.configuration["grubProbe"],
+ "-t", "disk", "--device-map=", install_efi_directory])
+
+ efi_drive_partition = efi_drive.replace("(","").replace(")","").split(",")[1]
+ # Get the first run of digits from the partition
+ efi_partititon_number = None
+ c = 0
+ start = None
+ while c < len(efi_drive_partition):
+ if efi_drive_partition[c].isdigit() and start is None:
+ start = c
+ if not efi_drive_partition[c].isdigit() and start is not None:
+ efi_drive_number = efi_drive_partition[start:c]
+ break
+ c += 1
+ if efi_partititon_number is None:
+ raise ValueError("No partition number found for %s" % install_efi_directory)
+
+ subprocess.call([
+ "/usr/sbin/efibootmgr",
+ "-c",
+ "-w",
+ "-L", efi_bootloader_id,
+ "-d", efi_disk,
+ "-p", efi_partititon_number,
+ "-l", install_efi_directory + "/" + install_efi_bin])
+
+
def vfat_correct_case(parent, name):
for candidate in os.listdir(parent):
if name.lower() == candidate.lower():
@@ -320,8 +381,14 @@ def prepare_bootloader(fw_type):
if efi_boot_loader == "systemd-boot" and fw_type == "efi":
install_systemd_boot(efi_directory)
- else:
+ elif efi_boot_loader == "sb-shim" and fw_type == "efi":
+ install_secureboot(efi_directory)
+ elif efi_boot_loader == "grub" or fw_type != "efi":
install_grub(efi_directory, fw_type)
+ else:
+ libcalamares.utils.debug( "WARNING: the combination of "
+ "boot-loader '{!s}' and firmware '{!s}' "
+ "is not supported.".format(efi_boot_loader, fw_type) )
def run():
diff --git a/src/modules/contextualprocess/ContextualProcessJob.cpp b/src/modules/contextualprocess/ContextualProcessJob.cpp
index 380a92d0a..d79297029 100644
--- a/src/modules/contextualprocess/ContextualProcessJob.cpp
+++ b/src/modules/contextualprocess/ContextualProcessJob.cpp
@@ -66,7 +66,7 @@ struct ContextualProcessBinding
void append( const QString& value, CalamaresUtils::CommandList* commands )
{
checks.append( ValueCheck( value, commands ) );
- if ( value == '*' )
+ if ( value == QString( "*" ) )
wildcard = commands;
}
diff --git a/src/modules/contextualprocess/Tests.cpp b/src/modules/contextualprocess/Tests.cpp
index ed6d4f278..89fb1922c 100644
--- a/src/modules/contextualprocess/Tests.cpp
+++ b/src/modules/contextualprocess/Tests.cpp
@@ -1,6 +1,6 @@
/* === This file is part of Calamares - ===
*
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/contextualprocess/contextualprocess.conf b/src/modules/contextualprocess/contextualprocess.conf
index 1f148328c..74bd2304a 100644
--- a/src/modules/contextualprocess/contextualprocess.conf
+++ b/src/modules/contextualprocess/contextualprocess.conf
@@ -17,7 +17,10 @@
#
# As a special case, the value-check "*" matches any value, but **only**
# if no other value-check matches. Use it as an *else* form for value-
-# checks. Take care to put the asterisk in quotes.
+# checks. Take care to put the asterisk in quotes. The value-check "*"
+# **also** matches a literal asterisk as value; a confusing corner case
+# is checking for an asterisk **and** having a wildcard match with
+# different commands. This is currently not possible.
#
# Global configuration variables are not checked in a deterministic
# order, so do not rely on commands from one variable-check to
diff --git a/src/modules/dummycpp/DummyCppJob.cpp b/src/modules/dummycpp/DummyCppJob.cpp
index fb5a2db3a..b404eaf63 100644
--- a/src/modules/dummycpp/DummyCppJob.cpp
+++ b/src/modules/dummycpp/DummyCppJob.cpp
@@ -2,6 +2,7 @@
*
* Copyright 2014, Teo Mrnjavac (original dummypython code)
* Copyright 2016, Kevin Kofler
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo
index 73c58bb4a..bb3f4ea3f 100644
Binary files a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo and b/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po
index 22412c347..8ccd80311 100644
--- a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po
+++ b/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po
@@ -8,8 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-04 08:16-0400\n"
+"POT-Creation-Date: 2018-05-28 04:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: guillermo pacheco , 2018\n"
"Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,24 +20,24 @@ msgstr ""
#: src/modules/dummypythonqt/main.py:84
msgid "Click me!"
-msgstr ""
+msgstr "¡Haz clic en mí!"
#: src/modules/dummypythonqt/main.py:94
msgid "A new QLabel."
-msgstr ""
+msgstr "Una nueva QLabel."
#: src/modules/dummypythonqt/main.py:97
msgid "Dummy PythonQt ViewStep"
-msgstr ""
+msgstr "Vision del PythonQt ficticio"
#: src/modules/dummypythonqt/main.py:183
msgid "The Dummy PythonQt Job"
-msgstr ""
+msgstr "Trabajo del PythonQt ficticio"
#: src/modules/dummypythonqt/main.py:186
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
-msgstr ""
+msgstr "Este es el Trabajo PythonQt ficticio. El trabajo ficticio dice: {}"
#: src/modules/dummypythonqt/main.py:190
msgid "A status message for Dummy PythonQt Job."
-msgstr ""
+msgstr "Un mensaje de estado para el trabajo PythonQt ficticio."
diff --git a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo
new file mode 100644
index 000000000..9dfa007bd
Binary files /dev/null and b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po
new file mode 100644
index 000000000..94b78e28a
--- /dev/null
+++ b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po
@@ -0,0 +1,42 @@
+# 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 , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-05-28 04:57-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/modules/dummypythonqt/main.py:84
+msgid "Click me!"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:94
+msgid "A new QLabel."
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:97
+msgid "Dummy PythonQt ViewStep"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:183
+msgid "The Dummy PythonQt Job"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:186
+msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:190
+msgid "A status message for Dummy PythonQt Job."
+msgstr ""
diff --git a/src/modules/finished/FinishedPage.cpp b/src/modules/finished/FinishedPage.cpp
index ca03ccb89..ef3b0745e 100644
--- a/src/modules/finished/FinishedPage.cpp
+++ b/src/modules/finished/FinishedPage.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/grubcfg/main.py b/src/modules/grubcfg/main.py
index 197a22edf..b19ebf588 100644
--- a/src/modules/grubcfg/main.py
+++ b/src/modules/grubcfg/main.py
@@ -7,7 +7,7 @@
# Copyright 2015-2017, Teo Mrnjavac
# Copyright 2017, Alf Gaida
# Copyright 2017, Adriaan de Groot
-# Copyright 2017, Gabriel Craciunescu
+# Copyright 2017-2018, Gabriel Craciunescu
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -44,16 +44,21 @@ def modify_grub_default(partitions, root_mount_point, distributor):
dracut_bin = libcalamares.utils.target_env_call(
["sh", "-c", "which dracut"]
)
- have_dracut = dracut_bin == 0 # Shell exit value 0 means success
+ plymouth_bin = libcalamares.utils.target_env_call(
+ ["sh", "-c", "which plymouth"]
+ )
+
+ # Shell exit value 0 means success
+ have_plymouth = plymouth_bin == 0
+ have_dracut = dracut_bin == 0
use_splash = ""
swap_uuid = ""
swap_outer_uuid = ""
swap_outer_mappername = None
- if libcalamares.globalstorage.contains("hasPlymouth"):
- if libcalamares.globalstorage.value("hasPlymouth"):
- use_splash = "splash"
+ if have_plymouth:
+ use_splash = "splash"
cryptdevice_params = []
diff --git a/src/modules/hwclock/main.py b/src/modules/hwclock/main.py
index e2f70ee61..9cac929ba 100644
--- a/src/modules/hwclock/main.py
+++ b/src/modules/hwclock/main.py
@@ -6,7 +6,7 @@
# Copyright 2014 - 2015, Philip Müller
# Copyright 2014, Teo Mrnjavac
# Copyright 2017, Alf Gaida
-# Copyright 2017, Gabriel Craciunescu
+# Copyright 2017-2018, Gabriel Craciunescu
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp
index 9e4b7e3ae..6f4473014 100644
--- a/src/modules/keyboard/KeyboardPage.cpp
+++ b/src/modules/keyboard/KeyboardPage.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Portions from the Manjaro Installation Framework
* by Roland Singer
@@ -95,8 +95,7 @@ KeyboardPage::KeyboardPage( QWidget* parent )
QString model = m_models.value( text, "pc105" );
// Set Xorg keyboard model
- QProcess::execute( QLatin1Literal( "setxkbmap" ),
- QStringList() << "-model" << model );
+ QProcess::execute( "setxkbmap", QStringList{ "-model", model } );
} );
CALAMARES_RETRANSLATE( ui->retranslateUi( this ); )
@@ -356,11 +355,15 @@ KeyboardPage::onActivate()
lang.replace( '-', '_' ); // Normalize separators
}
- if ( !lang.isEmpty() && specialCaseMap.contains( lang.toStdString() ) )
+ if ( !lang.isEmpty() )
{
- QLatin1String newLang( specialCaseMap.value( lang.toStdString() ).c_str() );
- cDebug() << " .. special case language" << lang << '>' << newLang;
- lang = newLang;
+ std::string lang_s = lang.toStdString();
+ if ( specialCaseMap.contains( lang_s ) )
+ {
+ QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) );
+ cDebug() << " .. special case language" << lang << "becomes" << newLang;
+ lang = newLang;
+ }
}
if ( !lang.isEmpty() )
{
@@ -478,9 +481,8 @@ KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWi
connect( &m_setxkbmapTimer, &QTimer::timeout,
this, [=]
{
- QProcess::execute( QLatin1Literal( "setxkbmap" ),
- xkbmap_args( QStringList(), layout, variant ) );
- cDebug() << "xkbmap selection changed to: " << layout << "-" << variant;
+ QProcess::execute( "setxkbmap", xkbmap_args( QStringList(), layout, variant ) );
+ cDebug() << "xkbmap selection changed to: " << layout << '-' << variant;
m_setxkbmapTimer.disconnect( this );
} );
m_setxkbmapTimer.start( QApplication::keyboardInputInterval() );
diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp
index 9cdf831e6..26aa18d87 100644
--- a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp
+++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Portions from the Manjaro Installation Framework
* by Roland Singer
diff --git a/src/modules/license/LicensePage.cpp b/src/modules/license/LicensePage.cpp
index 12d259e98..351c55d79 100644
--- a/src/modules/license/LicensePage.cpp
+++ b/src/modules/license/LicensePage.cpp
@@ -3,6 +3,7 @@
* Copyright 2015, Anke Boersma
* Copyright 2015, Alexandre Arnt
* Copyright 2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -57,7 +58,7 @@ LicensePage::LicensePage(QWidget *parent)
CalamaresUtils::defaultFontHeight() * 3,
CalamaresUtils::defaultFontHeight(),
CalamaresUtils::defaultFontHeight() );
-
+
ui->acceptFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain );
ui->acceptFrame->setStyleSheet( "#acceptFrame { border: 1px solid red;"
"background-color: #fff6f6;"
diff --git a/src/modules/license/LicensePage.h b/src/modules/license/LicensePage.h
index 4f84b55be..300e9e309 100644
--- a/src/modules/license/LicensePage.h
+++ b/src/modules/license/LicensePage.h
@@ -3,6 +3,7 @@
* Copyright 2015, Anke Boersma
* Copyright 2015, Alexandre Arnt
* Copyright 2015, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/locale/GeoIPJSON.cpp b/src/modules/locale/GeoIPJSON.cpp
index ee99e6c11..b4daf2084 100644
--- a/src/modules/locale/GeoIPJSON.cpp
+++ b/src/modules/locale/GeoIPJSON.cpp
@@ -28,7 +28,7 @@
#include
GeoIPJSON::GeoIPJSON(const QString& attribute)
- : GeoIP( attribute.isEmpty() ? QLatin1String( "time_zone" ) : attribute )
+ : GeoIP( attribute.isEmpty() ? QStringLiteral( "time_zone" ) : attribute )
{
}
diff --git a/src/modules/locale/GeoIPTests.cpp b/src/modules/locale/GeoIPTests.cpp
index 42779ede0..af114611e 100644
--- a/src/modules/locale/GeoIPTests.cpp
+++ b/src/modules/locale/GeoIPTests.cpp
@@ -23,6 +23,10 @@
#include "GeoIPXML.h"
#endif
+#include
+#include
+#include
+
#include
QTEST_GUILESS_MAIN( GeoIPTests )
@@ -49,15 +53,15 @@ GeoIPTests::testJSON()
GeoIPJSON handler;
auto tz = handler.processReply( json_data_attribute );
- QCOMPARE( tz.first, QLatin1String( "Europe" ) );
- QCOMPARE( tz.second, QLatin1String( "Amsterdam" ) );
+ QCOMPARE( tz.first, QStringLiteral( "Europe" ) );
+ QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) );
// JSON is quite tolerant
tz = handler.processReply( "time_zone: \"Europe/Brussels\"" );
- QCOMPARE( tz.second, QLatin1String( "Brussels" ) );
+ QCOMPARE( tz.second, QStringLiteral( "Brussels" ) );
tz = handler.processReply( "time_zone: America/New_York\n" );
- QCOMPARE( tz.first, QLatin1String( "America" ) );
+ QCOMPARE( tz.first, QStringLiteral( "America" ) );
}
void GeoIPTests::testJSONalt()
@@ -68,8 +72,8 @@ void GeoIPTests::testJSONalt()
QCOMPARE( tz.first, QString() ); // Not found
tz = handler.processReply( "tarifa: 12\nzona_de_hora: Europe/Madrid" );
- QCOMPARE( tz.first, QLatin1String( "Europe" ) );
- QCOMPARE( tz.second, QLatin1String( "Madrid" ) );
+ QCOMPARE( tz.first, QStringLiteral( "Europe" ) );
+ QCOMPARE( tz.second, QStringLiteral( "Madrid" ) );
}
void
@@ -118,8 +122,8 @@ GeoIPTests::testXML()
GeoIPXML handler;
auto tz = handler.processReply( xml_data_ubiquity );
- QCOMPARE( tz.first, QLatin1String( "Europe" ) );
- QCOMPARE( tz.second, QLatin1String( "Amsterdam" ) );
+ QCOMPARE( tz.first, QStringLiteral( "Europe" ) );
+ QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) );
#endif
}
@@ -133,8 +137,8 @@ GeoIPTests::testXML2()
GeoIPXML handler;
auto tz = handler.processReply( data );
- QCOMPARE( tz.first, QLatin1String( "America" ) );
- QCOMPARE( tz.second, QLatin1String( "North_Dakota/Beulah" ) ); // Without space
+ QCOMPARE( tz.first, QStringLiteral( "America" ) );
+ QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); // Without space
#endif
}
@@ -145,8 +149,8 @@ void GeoIPTests::testXMLalt()
GeoIPXML handler( "ZT" );
auto tz = handler.processReply( "Moon/Dark_side" );
- QCOMPARE( tz.first, QLatin1String( "Moon" ) );
- QCOMPARE( tz.second, QLatin1String( "Dark_side" ) );
+ QCOMPARE( tz.first, QStringLiteral( "Moon" ) );
+ QCOMPARE( tz.second, QStringLiteral( "Dark_side" ) );
#endif
}
@@ -168,26 +172,26 @@ GeoIPTests::testXMLbad()
void GeoIPTests::testSplitTZ()
{
- auto tz = GeoIP::splitTZString( QLatin1String("Moon/Dark_side") );
- QCOMPARE( tz.first, QLatin1String("Moon") );
- QCOMPARE( tz.second, QLatin1String("Dark_side") );
+ auto tz = GeoIP::splitTZString( QStringLiteral("Moon/Dark_side") );
+ QCOMPARE( tz.first, QStringLiteral("Moon") );
+ QCOMPARE( tz.second, QStringLiteral("Dark_side") );
// Some providers return weirdly escaped data
- tz = GeoIP::splitTZString( QLatin1String("America\\/NewYork") );
- QCOMPARE( tz.first, QLatin1String("America") );
- QCOMPARE( tz.second, QLatin1String("NewYork") ); // That's not actually the zone name
+ tz = GeoIP::splitTZString( QStringLiteral("America\\/NewYork") );
+ QCOMPARE( tz.first, QStringLiteral("America") );
+ QCOMPARE( tz.second, QStringLiteral("NewYork") ); // That's not actually the zone name
// Check that bogus data fails
tz = GeoIP::splitTZString( QString() );
QCOMPARE( tz.first, QString() );
- tz = GeoIP::splitTZString( QLatin1String("America.NewYork") );
+ tz = GeoIP::splitTZString( QStringLiteral("America.NewYork") );
QCOMPARE( tz.first, QString() );
// Check that three-level is split properly and space is replaced
- tz = GeoIP::splitTZString( QLatin1String("America/North Dakota/Beulah") );
- QCOMPARE( tz.first, QLatin1String("America") );
- QCOMPARE( tz.second, QLatin1String("North_Dakota/Beulah") );
+ tz = GeoIP::splitTZString( QStringLiteral("America/North Dakota/Beulah") );
+ QCOMPARE( tz.first, QStringLiteral("America") );
+ QCOMPARE( tz.second, QStringLiteral("North_Dakota/Beulah") );
}
@@ -217,7 +221,7 @@ synchronous_get( const char* urlstring )
void GeoIPTests::testGet()
{
- if ( !QProcessEnvironment::systemEnvironment().contains( QLatin1String("TEST_HTTP_GET") ) )
+ if ( !QProcessEnvironment::systemEnvironment().contains( QStringLiteral("TEST_HTTP_GET") ) )
{
qDebug() << "Skipping HTTP GET tests";
return;
@@ -228,8 +232,8 @@ void GeoIPTests::testGet()
auto default_tz = default_handler.processReply( synchronous_get( "https://geoip.kde.org/v1/calamares" ) );
// This is bogus, because the test isn't always run by me
- // QCOMPARE( default_tz.first, QLatin1String("Europe") );
- // QCOMPARE( default_tz.second, QLatin1String("Amsterdam") );
+ // QCOMPARE( default_tz.first, QStringLiteral("Europe") );
+ // QCOMPARE( default_tz.second, QStringLiteral("Amsterdam") );
QVERIFY( !default_tz.first.isEmpty() );
QVERIFY( !default_tz.second.isEmpty() );
@@ -238,12 +242,12 @@ void GeoIPTests::testGet()
// services don't agree on the location of where the test is run.
CHECK_GET( JSON, QString(), "https://geoip.kde.org/v1/calamares" ) // Check it's consistent
CHECK_GET( JSON, QString(), "http://freegeoip.net/json/" ) // Original FreeGeoIP service
- CHECK_GET( JSON, QLatin1String("timezone"), "https://ipapi.co/json" ) // Different JSON
- CHECK_GET( JSON, QLatin1String("timezone"), "http://ip-api.com/json" )
+ CHECK_GET( JSON, QStringLiteral("timezone"), "https://ipapi.co/json" ) // Different JSON
+ CHECK_GET( JSON, QStringLiteral("timezone"), "http://ip-api.com/json" )
- CHECK_GET( JSON, QLatin1String("location.time_zone"), "http://geoip.nekudo.com/api/" ) // 2-level JSON
+ CHECK_GET( JSON, QStringLiteral("location.time_zone"), "http://geoip.nekudo.com/api/" ) // 2-level JSON
- CHECK_GET( JSON, QLatin1String("Location.TimeZone"), "https://geoip.kde.org/debug" ) // 2-level JSON
+ CHECK_GET( JSON, QStringLiteral("Location.TimeZone"), "https://geoip.kde.org/debug" ) // 2-level JSON
#ifdef HAVE_XML
CHECK_GET( XML, QString(), "http://geoip.ubuntu.com/lookup" ) // Ubiquity's XML format
diff --git a/src/modules/locale/GeoIPXML.cpp b/src/modules/locale/GeoIPXML.cpp
index 0fb5359f3..bd675c2ef 100644
--- a/src/modules/locale/GeoIPXML.cpp
+++ b/src/modules/locale/GeoIPXML.cpp
@@ -24,7 +24,7 @@
#include
GeoIPXML::GeoIPXML( const QString& element )
- : GeoIP( element.isEmpty() ? QLatin1String( "TimeZone" ) : element )
+ : GeoIP( element.isEmpty() ? QStringLiteral( "TimeZone" ) : element )
{
}
diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp
index f4cbc800d..7c8ad3305 100644
--- a/src/modules/locale/LocaleConfiguration.cpp
+++ b/src/modules/locale/LocaleConfiguration.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2016, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h
index 4f6cde556..c077ef6f7 100644
--- a/src/modules/locale/LocaleConfiguration.h
+++ b/src/modules/locale/LocaleConfiguration.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2016, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp
index e4f36daad..9aad283c6 100644
--- a/src/modules/locale/LocalePage.cpp
+++ b/src/modules/locale/LocalePage.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -498,7 +498,7 @@ LocalePage::updateGlobalStorage()
#ifndef DEBUG_TIMEZONES
if ( Calamares::Settings::instance()->doChroot() )
{
- QProcess ::execute( "timedatectl", // depends on systemd
+ QProcess::execute( "timedatectl", // depends on systemd
{ "set-timezone",
location.region + '/' + location.zone } );
}
diff --git a/src/modules/locale/LocaleViewStep.h b/src/modules/locale/LocaleViewStep.h
index b02f6adbd..8006bc616 100644
--- a/src/modules/locale/LocaleViewStep.h
+++ b/src/modules/locale/LocaleViewStep.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/locale/test_geoip.cpp b/src/modules/locale/test_geoip.cpp
index 7b6584f0c..5ba43f72e 100644
--- a/src/modules/locale/test_geoip.cpp
+++ b/src/modules/locale/test_geoip.cpp
@@ -38,10 +38,10 @@ int main(int argc, char** argv)
}
GeoIP* handler = nullptr;
- if ( QLatin1String( "json" ) == argv[1] )
+ if ( QStringLiteral( "json" ) == argv[1] )
handler = new GeoIPJSON;
#ifdef HAVE_XML
- else if ( QLatin1String( "xml" ) == argv[1] )
+ else if ( QStringLiteral( "xml" ) == argv[1] )
handler = new GeoIPXML;
#endif
diff --git a/src/modules/locale/timezonewidget/timezonewidget.cpp b/src/modules/locale/timezonewidget/timezonewidget.cpp
index 6609160d5..7b5a2f0d3 100644
--- a/src/modules/locale/timezonewidget/timezonewidget.cpp
+++ b/src/modules/locale/timezonewidget/timezonewidget.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Originally from the Manjaro Installation Framework
* by Roland Singer
diff --git a/src/modules/locale/timezonewidget/timezonewidget.h b/src/modules/locale/timezonewidget/timezonewidget.h
index 8589dc74d..dd49b3311 100644
--- a/src/modules/locale/timezonewidget/timezonewidget.h
+++ b/src/modules/locale/timezonewidget/timezonewidget.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Originally from the Manjaro Installation Framework
* by Roland Singer
diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py
index e6c37133b..d44d7da2b 100644
--- a/src/modules/localecfg/main.py
+++ b/src/modules/localecfg/main.py
@@ -6,6 +6,7 @@
# Copyright 2014, Anke Boersma
# Copyright 2015, Philip Müller
# Copyright 2016, Teo Mrnjavac
+# Copyright 2018, AlmAck
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/src/modules/netinstall/NetInstallPage.cpp b/src/modules/netinstall/NetInstallPage.cpp
index 5272d83fd..39282ef00 100644
--- a/src/modules/netinstall/NetInstallPage.cpp
+++ b/src/modules/netinstall/NetInstallPage.cpp
@@ -2,7 +2,7 @@
* Copyright 2016, Luca Giambonini
* Copyright 2016, Lisa Vitolo
* Copyright 2017, Kyle Robbertze
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
* Copyright 2017, Gabriel Craciunescu
*
* Calamares is free software: you can redistribute it and/or modify
diff --git a/src/modules/netinstall/NetInstallPage.h b/src/modules/netinstall/NetInstallPage.h
index 3dc8ee46e..7ec37e7ac 100644
--- a/src/modules/netinstall/NetInstallPage.h
+++ b/src/modules/netinstall/NetInstallPage.h
@@ -2,7 +2,7 @@
* Copyright 2016, Luca Giambonini
* Copyright 2016, Lisa Vitolo
* Copyright 2017, Kyle Robbertze
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/netinstall/NetInstallViewStep.cpp b/src/modules/netinstall/NetInstallViewStep.cpp
index de4480cbb..6dd824b32 100644
--- a/src/modules/netinstall/NetInstallViewStep.cpp
+++ b/src/modules/netinstall/NetInstallViewStep.cpp
@@ -2,7 +2,7 @@
* Copyright 2016, Luca Giambonini
* Copyright 2016, Lisa Vitolo
* Copyright 2017, Kyle Robbertze
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/netinstall/PackageModel.cpp b/src/modules/netinstall/PackageModel.cpp
index 3e721c017..f64bd778f 100644
--- a/src/modules/netinstall/PackageModel.cpp
+++ b/src/modules/netinstall/PackageModel.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright (c) 2017, Kyle Robbertze
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp
index 3f3134c5b..f8be44345 100644
--- a/src/modules/partition/core/KPMHelpers.cpp
+++ b/src/modules/partition/core/KPMHelpers.cpp
@@ -2,6 +2,7 @@
*
* Copyright 2014, Aurélien Gâteau
* Copyright 2015-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp
index a39cb5395..12aa489db 100644
--- a/src/modules/partition/core/PartUtils.cpp
+++ b/src/modules/partition/core/PartUtils.cpp
@@ -344,23 +344,29 @@ isEfiSystem()
bool
isEfiBootable( const Partition* candidate )
{
+ cDebug() << "Check EFI bootable" << candidate->partitionPath() << candidate->devicePath();
+ cDebug() << " .. flags" << candidate->activeFlags();
+
auto flags = PartitionInfo::flags( candidate );
/* If bit 17 is set, old-style Esp flag, it's OK */
if ( flags.testFlag( PartitionTable::FlagEsp ) )
return true;
-
/* Otherwise, if it's a GPT table, Boot (bit 0) is the same as Esp */
const PartitionNode* root = candidate;
while ( root && !root->isRoot() )
+ {
root = root->parent();
+ cDebug() << " .. moved towards root" << (void *)root;
+ }
// Strange case: no root found, no partition table node?
if ( !root )
return false;
const PartitionTable* table = dynamic_cast( root );
+ cDebug() << " .. partition table" << (void *)table << "type" << ( table ? table->type() : PartitionTable::TableType::unknownTableType );
return table && ( table->type() == PartitionTable::TableType::gpt ) &&
flags.testFlag( PartitionTable::FlagBoot );
}
diff --git a/src/modules/partition/core/PartUtils.h b/src/modules/partition/core/PartUtils.h
index c81258712..b94e20567 100644
--- a/src/modules/partition/core/PartUtils.h
+++ b/src/modules/partition/core/PartUtils.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2015-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp
index e1822d434..d654edf12 100644
--- a/src/modules/partition/core/PartitionActions.cpp
+++ b/src/modules/partition/core/PartitionActions.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2017, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp
index c810f6abc..3cc88d527 100644
--- a/src/modules/partition/core/PartitionCoreModule.cpp
+++ b/src/modules/partition/core/PartitionCoreModule.cpp
@@ -2,7 +2,8 @@
*
* Copyright 2014, Aurélien Gâteau
* Copyright 2014-2015, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
+ * Copyright 2018, Caio Carvalho
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/PartitionInfo.cpp b/src/modules/partition/core/PartitionInfo.cpp
index dcd49d2e9..9cc03fc9d 100644
--- a/src/modules/partition/core/PartitionInfo.cpp
+++ b/src/modules/partition/core/PartitionInfo.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Aurélien Gâteau
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/PartitionInfo.h b/src/modules/partition/core/PartitionInfo.h
index 9003bf997..a9c391059 100644
--- a/src/modules/partition/core/PartitionInfo.h
+++ b/src/modules/partition/core/PartitionInfo.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Aurélien Gâteau
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/core/PartitionModel.cpp b/src/modules/partition/core/PartitionModel.cpp
index 0265da29d..8f0ecba81 100644
--- a/src/modules/partition/core/PartitionModel.cpp
+++ b/src/modules/partition/core/PartitionModel.cpp
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Aurélien Gâteau
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp
index fdc68ef97..bef6e4966 100644
--- a/src/modules/partition/gui/ChoicePage.cpp
+++ b/src/modules/partition/gui/ChoicePage.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2017, Teo Mrnjavac
- * Copyright 2017, Adriaan de Groot
+ * Copyright 2017-2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h
index 91274d152..c36747e93 100644
--- a/src/modules/partition/gui/ChoicePage.h
+++ b/src/modules/partition/gui/ChoicePage.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp
index 439583be9..0e7602c08 100644
--- a/src/modules/partition/gui/CreatePartitionDialog.cpp
+++ b/src/modules/partition/gui/CreatePartitionDialog.cpp
@@ -2,6 +2,9 @@
*
* Copyright 2014, Aurélien Gâteau
* Copyright 2016, Teo Mrnjavac
+ * Copyright 2018, Adriaan de Groot
+ * Copyright 2018, Andrius Štikonas
+ * Copyright 2018, Caio Carvalho