From 8211edc6fd5f72f831e0fc96b321ec3755fe5bd1 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Sat, 16 Jun 2018 19:27:44 -0400 Subject: [PATCH 01/29] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_ko.ts | 608 ++++++++++++++++++++++--------------------- 1 file changed, 306 insertions(+), 302 deletions(-) diff --git a/lang/calamares_ko.ts b/lang/calamares_ko.ts index 73b81b498..f2f9d6a49 100644 --- a/lang/calamares_ko.ts +++ b/lang/calamares_ko.ts @@ -22,27 +22,27 @@ Master Boot Record of %1 - + %1의 마스터 부트 레코드 Boot Partition - + 부트 파티션 System Partition - + 시스템 파티션 Do not install a boot loader - + 부트로더를 설치하지 않습니다 %1 (%2) - + %1 (%2) @@ -55,22 +55,22 @@ GlobalStorage - + 전역 스토리지 JobQueue - + 작업 대기열 Modules - + 모듈 Type: - + 유형: @@ -81,17 +81,17 @@ Interface: - + 인터페이스: Tools - + 도구 Debug information - + 디버깅 정보 @@ -99,7 +99,7 @@ Install - + 설치 @@ -107,7 +107,7 @@ Done - + 완료 @@ -128,32 +128,32 @@ Running %1 operation. - + %1 명령을 실행 중 Bad working directory path - + 잘못된 작업 디렉터리 경로 Working directory %1 for python job %2 is not readable. - + 파이썬 작업 %2에 대한 작업 디렉터리 %1을 읽을 수 없습니다. Bad main script file - + 잘못된 주 스크립트 파일 Main script file %1 for python job %2 is not readable. - + 파이썬 작업 %2에 대한 주 스크립트 파일 %1을 읽을 수 없습니다. Boost.Python error in job "%1". - + 작업 "%1"에서 Boost.Python 오류 @@ -161,61 +161,62 @@ &Back - + 뒤로(&B) &Next - + 다음(&N) &Cancel - + 취소(&C) Cancel installation without changing the system. - + 시스템 변경 없이 설치를 취소합니다. &Install - + 설치(&I) Cancel installation? - + 설치를 취소하시겠습니까? Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - + 정말로 현재 설치 프로세스를 취소하시겠습니까? +설치 관리자가 종료되며 모든 변경은 반영되지 않습니다. &Yes - + 예(&Y) &No - + 아니오(&N) &Close - + 닫기(&C) Continue with setup? - + 설치를 계속하시겠습니까? @@ -225,32 +226,32 @@ The installer will quit and all changes will be lost. &Install now - + 지금 설치(&I) Go &back - + 뒤로 이동(&b) &Done - + 완료(&D) The installation is complete. Close the installer. - + 설치가 완료되었습니다. 설치 관리자를 닫습니다. Error - + 오류 Installation Failed - + 설치 실패 @@ -258,22 +259,22 @@ The installer will quit and all changes will be lost. Unknown exception type - + 알 수 없는 예외 유형 unparseable Python error - + 구문 분석할 수 없는 파이썬 오류 unparseable Python traceback - + 구문 분석할 수 없는 파이썬 역추적 정보 Unfetchable Python error. - + 가져올 수 없는 파이썬 오류 @@ -281,12 +282,12 @@ The installer will quit and all changes will be lost. %1 Installer - + %1 설치 관리자 Show debug information - + 디버깅 정보 보기 @@ -314,7 +315,7 @@ The installer will quit and all changes will be lost. System requirements - + 시스템 요구 사항 @@ -327,7 +328,7 @@ The installer will quit and all changes will be lost. After: - + 이후: @@ -337,7 +338,7 @@ The installer will quit and all changes will be lost. Boot loader location: - + 부트 로더 위치: @@ -347,7 +348,7 @@ The installer will quit and all changes will be lost. Select storage de&vice: - + 스토리지 장치 선택 @@ -355,7 +356,7 @@ The installer will quit and all changes will be lost. Current: - + 현재: @@ -380,12 +381,12 @@ The installer will quit and all changes will be lost. The EFI system partition at %1 will be used for starting %2. - + %1의 EFI 시스템 파티션은 %2의 시작으로 사용될 것입니다. EFI system partition: - + EFI 시스템 파티션: @@ -437,17 +438,17 @@ The installer will quit and all changes will be lost. Clear mounts for partitioning operations on %1 - + 파티셔닝 작업을 위해 %1의 마운트를 모두 해제합니다 Clearing mounts for partitioning operations on %1. - + 파티셔닝 작업을 위해 %1의 마운트를 모두 해제하는 중입니다. Cleared all mounts for %1 - + %1의 모든 마운트가 해제되었습니다. @@ -455,22 +456,22 @@ The installer will quit and all changes will be lost. Clear all temporary mounts. - + 모든 임시 마운트들을 해제합니다 Clearing all temporary mounts. - + 모든 임시 마운트들이 해제하는 중입니다. Cannot get list of temporary mounts. - + 임시 마운트들의 목록을 가져올 수 없습니다. Cleared all temporary mounts. - + 모든 임시 마운트들이 해제되었습니다. @@ -479,17 +480,17 @@ The installer will quit and all changes will be lost. Could not run command. - + 명령을 실행할 수 없습니다. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + 이 명령은 호스트 환경에서 실행되며 루트 경로를 알아야하지만, rootMountPoint가 정의되지 않았습니다. The command needs to know the user's name, but no username is defined. - + 이 명령은 사용자 이름을 알아야 하지만, username이 정의되지 않았습니다. @@ -497,7 +498,7 @@ The installer will quit and all changes will be lost. Contextual Processes Job - + 컨텍스트 프로세스 작업 @@ -505,77 +506,77 @@ The installer will quit and all changes will be lost. Create a Partition - + 파티션 생성 MiB - + MiB Partition &Type: - + 파티션 유형(&T): &Primary - + 주 파티션(&P) E&xtended - + 확장 파티션(&E) Fi&le System: - + 파일 시스템(&l): LVM LV name - + LVM 논리 볼륨 이름 Flags: - + 플래그: &Mount Point: - + 마운트 지점(&M): Si&ze: - + 크기(&z): En&crypt - + 암호화(&c) Logical - + 논리 파티션 Primary - + 주 파티션 GPT - + GPT Mountpoint already in use. Please select another one. - + 마운트 위치가 이미 사용 중입니다. 다른 위치를 선택해주세요. @@ -606,27 +607,27 @@ The installer will quit and all changes will be lost. Create Partition Table - + 파티션 테이블을 만듭니다 Creating a new partition table will delete all existing data on the disk. - + 새로운 파티션 테이블의 생성은 디스크에 있는 모든 데이터를 지울 것입니다. What kind of partition table do you want to create? - + 만들고자 하는 파티션 테이블의 종류는 무엇인가요? Master Boot Record (MBR) - + 마스터 부트 레코드 (MBR) GUID Partition Table (GPT) - + GUID 파티션 테이블 (GPT) @@ -634,22 +635,22 @@ The installer will quit and all changes will be lost. Create new %1 partition table on %2. - + %2에 %1 파티션 테이블을 만듭니다. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + <strong>%2</strong>에 새로운 <strong>%1</strong> 파티션 테이블을 만듭니다 (%3). Creating new %1 partition table on %2. - + %2에 새로운 %1 파티션 테이블을 만드는 중입니다. The installer failed to create a partition table on %1. - + 설치 관리자가 %1에 파티션 테이블을 만들지 못했습니다. @@ -657,37 +658,37 @@ The installer will quit and all changes will be lost. Create user %1 - + %1 사용자를 만듭니다 Create user <strong>%1</strong>. - + <strong>%1</strong>사용자를 만듭니다 . Creating user %1. - + %1 사용자를 만드는 중입니다. Sudoers dir is not writable. - + Sudoers 디렉터리가 쓰기 금지되어 있습니다. Cannot create sudoers file for writing. - + sudoers 파일을 만들 수가 없습니다. Cannot chmod sudoers file. - + sudoers 파일의 권한을 변경할 수 없습니다. Cannot open groups file for reading. - + groups 파일을 읽을 수가 없습니다. @@ -695,22 +696,22 @@ The installer will quit and all changes will be lost. Delete partition %1. - + %1 파티션을 지웁니다. Delete partition <strong>%1</strong>. - + <strong>%1</strong> 파티션을 지웁니다. Deleting partition %1. - + %1 파티션을 지우는 중입니다. The installer failed to delete partition %1. - + 설치 관리자가 %1 파티션을 지우지 못했습니다. @@ -723,7 +724,7 @@ The installer will quit and all changes will be lost. This device has a <strong>%1</strong> partition table. - + 이 장치는 <strong>%1</strong> 파티션 테이블을 갖고 있습니다. @@ -769,7 +770,7 @@ The installer will quit and all changes will be lost. Failed to open %1 - + %1을 열지 못했습니다 @@ -777,7 +778,7 @@ The installer will quit and all changes will be lost. Dummy C++ Job - + 더미 C++ 작업 @@ -785,57 +786,57 @@ The installer will quit and all changes will be lost. Edit Existing Partition - + 기존 파티션을 수정합니다 Content: - + 내용: &Keep - + 유지(&K) Format - + 포맷 Warning: Formatting the partition will erase all existing data. - + 경고: 파티션을 포맷하는 것은 모든 데이터를 지울 것입니다. &Mount Point: - + 마운트 위치(&M): Si&ze: - + 크기(&z): MiB - + MiB Fi&le System: - + 파일 시스템(&l): Flags: - + 플래그: Mountpoint already in use. Please select another one. - + 마운트 위치가 이미 사용 중입니다. 다른 위치를 선택해주세요. @@ -848,22 +849,22 @@ The installer will quit and all changes will be lost. En&crypt system - + 시스템 암호화(&c) Passphrase - + 암호 Confirm passphrase - + 암호 확인 Please enter the same passphrase in both boxes. - + 암호와 암호 확인 상자에 동일한 값을 입력해주세요. @@ -871,7 +872,7 @@ The installer will quit and all changes will be lost. Set partition information - + 파티션 정보 설정 @@ -901,7 +902,7 @@ The installer will quit and all changes will be lost. Setting up mount points. - + 마운트 위치를 설정 중입니다. @@ -919,7 +920,7 @@ The installer will quit and all changes will be lost. &Restart now - + 지금 재시작(&R) @@ -937,17 +938,17 @@ The installer will quit and all changes will be lost. Finish - + 완료 Installation Complete - + 설치 완료 The installation of %1 is complete. - + %1의 설치가 완료되었습니다. @@ -965,12 +966,12 @@ The installer will quit and all changes will be lost. Formatting partition %1 with file system %2. - + %1 파티션을 %2 파일 시스템으로 포맷하는 중입니다. The installer failed to format partition %1 on disk '%2'. - + 설치 관리자가 '%2' 디스크에 있는 %1 파티션을 포맷하지 못했습니다. @@ -978,17 +979,17 @@ The installer will quit and all changes will be lost. Konsole not installed - + Konsole이 설치되지 않았음 Please install KDE Konsole and try again! - + KDE Konsole을 설치한 후에 다시 시도해주세요! Executing script: &nbsp;<code>%1</code> - + 스크립트 실행: &nbsp;<code>%1</code> @@ -996,7 +997,7 @@ The installer will quit and all changes will be lost. Script - + 스크립트 @@ -1004,12 +1005,12 @@ The installer will quit and all changes will be lost. Set keyboard model to %1.<br/> - + 키보드 모델을 %1로 설정합니다.<br/> Set keyboard layout to %1/%2. - + 키보드 레이아웃을 %1/%2로 설정합니다. @@ -1017,7 +1018,7 @@ The installer will quit and all changes will be lost. Keyboard - + 키보드 @@ -1025,7 +1026,7 @@ The installer will quit and all changes will be lost. System locale setting - + 시스템 로케일 설정 @@ -1035,12 +1036,12 @@ The installer will quit and all changes will be lost. &Cancel - + 취소(&C) &OK - + 확인(&O) @@ -1053,27 +1054,27 @@ The installer will quit and all changes will be lost. I accept the terms and conditions above. - + 상기 계약 조건을 모두 동의합니다. <h1>License Agreement</h1>This setup procedure will install proprietary software that is subject to licensing terms. - + <h1>라이센스 동의</h1>이 설치 절차는 라이센스 조항의 적용을 받는 독점 소프트웨어를 설치합니다. Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, the setup procedure cannot continue. - + 상기 최종 사용자 라이센스 동의 (EULAs) 를 검토해주시길 바랍니다.<br/>조건에 동의하지 않는다면, 설치 절차를 계속할 수 없습니다. <h1>License Agreement</h1>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + <h1>라이센스 동의</h1>이 설치 절차는 추가적인 기능들을 제공하고 사용자 환경을 개선하기 위한 독점 소프트웨어를 설치할 수 있으며, 이 소프트웨어는 라이센스 조항의 적용을 받습니다. Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + 상기 최종 사용자 라이센스 동의 (EULAs) 를 검토해주시길 바랍니다. <br/>조건에 동의하지 않는다면, 독점 소프트웨어는 설치되지 않을 것이며, 대체하여 사용할 수 있는 오픈 소스 소프트웨어가 사용될 것입니다. @@ -1110,7 +1111,7 @@ The installer will quit and all changes will be lost. <a href="%1">view license agreement</a> - + <a href="%1">라이센스 동의 보기</a> @@ -1118,7 +1119,7 @@ The installer will quit and all changes will be lost. License - + 라이센스 @@ -1126,39 +1127,39 @@ The installer will quit and all changes will be lost. The system language will be set to %1. - + 시스템 언어가 %1로 설정될 것입니다. The numbers and dates locale will be set to %1. - + 숫자와 날짜 로케일이 %1로 설정될 것입니다. Region: - + 대륙: Zone: - + 표준시간대: &Change... - + 변경(&C)... Set timezone to %1/%2.<br/> - + 표준시간대를 %1/%2로 설정합니다.<br/> %1 (%2) Language (Country) - + %1 (%2) @@ -1166,12 +1167,12 @@ The installer will quit and all changes will be lost. Loading location data... - + 위치 정보를 불러오는 중입니다... Location - + 위치 @@ -1179,22 +1180,22 @@ The installer will quit and all changes will be lost. Name - + 이름 Description - + 설명 Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - + 네트워크 설치. (불가: 패키지 목록을 가져올 수 없습니다. 네트워크 연결을 확인해주세요) Network Installation. (Disabled: Received invalid groups data) - + 네트워크 설치. (불가: 유효하지 않은 그룹 데이터를 수신했습니다) @@ -1202,7 +1203,7 @@ The installer will quit and all changes will be lost. Package selection - + 패키지 선택 @@ -1210,102 +1211,102 @@ The installer will quit and all changes will be lost. Password is too short - + 암호가 너무 짧습니다 Password is too long - + 암호가 너무 깁니다 Password is too weak - + 암호가 너무 취약합니다 Memory allocation error when setting '%1' - + '%1'을 설정하는 중 메모리 할당 오류 Memory allocation error - + 메모리 할당 오류 The password is the same as the old one - + 암호가 이전과 같습니다 The password is a palindrome - + 암호가 회문입니다 The password differs with case changes only - + 암호가 대소문자만 다릅니다 The password is too similar to the old one - + 암호가 이전 암호와 너무 유사합니다 The password contains the user name in some form - + 암호가 사용자 이름의 일부를 포함하고 있습니다. The password contains words from the real name of the user in some form - + 암호가 사용자 실명의 일부를 포함하고 있습니다 The password contains forbidden words in some form - + 암호가 금지된 단어를 포함하고 있습니다 The password contains less than %1 digits - + 암호가 %1개 미만의 숫자를 포함하고 있습니다 The password contains too few digits - + 암호가 너무 적은 개수의 숫자들을 포함하고 있습니다 The password contains less than %1 uppercase letters - + 암호가 %1개 미만의 대문자를 포함하고 있습니다 The password contains too few uppercase letters - + 암호가 너무 적은 개수의 대문자를 포함하고 있습니다 The password contains less than %1 lowercase letters - + 암호가 %1개 미만의 소문자를 포함하고 있습니다 The password contains too few lowercase letters - + 암호가 너무 적은 개수의 소문자를 포함하고 있습니다 The password contains less than %1 non-alphanumeric characters - + 암호가 %1개 미만의 영숫자가 아닌 문자를 포함하고 있습니다 The password contains too few non-alphanumeric characters - + 암호가 너무 적은 개수의 영숫자가 아닌 문자를 포함하고 있습니다 @@ -1440,12 +1441,12 @@ The installer will quit and all changes will be lost. Fatal failure - + 치명적인 실패 Unknown error - + 알 수 없는 오류 @@ -1458,12 +1459,12 @@ The installer will quit and all changes will be lost. Keyboard Model: - + 키보드 모델: Type here to test your keyboard - + 키보드를 테스트하기 위해 여기에 입력하세요 @@ -1476,12 +1477,12 @@ The installer will quit and all changes will be lost. What is your name? - + 이름이 무엇인가요? What name do you want to use to log in? - + 로그인을 위해 어떤 이름을 사용할 것인가요? @@ -1493,12 +1494,12 @@ The installer will quit and all changes will be lost. <small>If more than one person will use this computer, you can set up multiple accounts after installation.</small> - + <small>한명 이상의 사용자가 이 컴퓨터를 사용할 것이라면, 설치 후에 여러 사용자 계정을 설정할 수 있습니다.</small> Choose a password to keep your account safe. - + 사용자 계정의 보안을 유지하기 위한 암호를 선택하세요. @@ -1508,7 +1509,7 @@ The installer will quit and all changes will be lost. What is the name of this computer? - + 이 컴퓨터의 이름은 무엇인가요? @@ -1518,22 +1519,22 @@ The installer will quit and all changes will be lost. Log in automatically without asking for the password. - + 암호를 묻지 않고 자동으로 로그인합니다. Use the same password for the administrator account. - + 관리자 계정에 대해 같은 암호를 사용합니다. Choose a password for the administrator account. - + 관리자 계정을 위한 암호를 선택하세요. <small>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>입력 오류를 검사하기 위해 암호를 똑같이 두번 입력하세요.</small> @@ -1541,37 +1542,37 @@ The installer will quit and all changes will be lost. Root - + 루트 Home - + Boot - + 부트 EFI system - + EFI 시스템 Swap - + 스왑 New partition for %1 - + %1에 대한 새로운 파티션 New partition - + 새로운 파티션 @@ -1585,33 +1586,33 @@ The installer will quit and all changes will be lost. Free Space - + 여유 공간 New partition - + 새로운 파티션 Name - + 이름 File System - + 파일 시스템 Mount Point - + 마운트 위치 Size - + 크기 @@ -1624,37 +1625,37 @@ The installer will quit and all changes will be lost. Storage de&vice: - + 스토리지 장치(&v): &Revert All Changes - + 모든 변경 되돌리기(&R) New Partition &Table - + 새로운 파티션 테이블(&T) &Create - + 생성(&C) &Edit - + 수정(&E) &Delete - + 삭제(&D) Install boot &loader on: - + 부트 로더 설치 위치(&l): @@ -1664,7 +1665,7 @@ The installer will quit and all changes will be lost. Can not create new partition - + 새로운 파티션을 만들 수 없습니다 @@ -1677,12 +1678,12 @@ The installer will quit and all changes will be lost. Gathering system information... - + 시스템 정보 수집 중... Partitions - + 파티션 @@ -1732,17 +1733,17 @@ The installer will quit and all changes will be lost. Current: - + 현재: After: - + 이후: No EFI system partition configured - + EFI 시스템 파티션이 설정되지 않았습니다 @@ -1752,7 +1753,7 @@ The installer will quit and all changes will be lost. EFI system partition flag not set - + EFI 시스템 파티션 플래그가 설정되지 않았습니다 @@ -1762,7 +1763,7 @@ The installer will quit and all changes will be lost. Boot partition not encrypted - + 부트 파티션이 암호화되지 않았습니다 @@ -1775,13 +1776,13 @@ The installer will quit and all changes will be lost. Plasma Look-and-Feel Job - + 플라즈마 Look-and-Feel 작업 Could not select KDE Plasma Look-and-Feel package - + KDE 플라즈마 Look-and-Feel 패키지를 선택할 수 없습니다 @@ -1807,7 +1808,7 @@ The installer will quit and all changes will be lost. Look-and-Feel - + Look-and-Feel @@ -1815,17 +1816,17 @@ The installer will quit and all changes will be lost. Saving files for later ... - + 나중을 위해 파일들을 저장하는 중... No files configured to save for later. - + 나중을 위해 저장될 설정된 파일들이 없습니다. Not all of the configured files could be preserved. - + 모든 설정된 파일들이 보존되는 것은 아닙니다. @@ -1834,39 +1835,42 @@ The installer will quit and all changes will be lost. There was no output from the command. - + +명령으로부터 아무런 출력이 없습니다. Output: - + +출력: + External command crashed. - + 외부 명령이 실패했습니다. Command <i>%1</i> crashed. - + <i>%1</i> 명령이 실패했습니다. External command failed to start. - + 외부 명령을 시작하지 못했습니다. Command <i>%1</i> failed to start. - + <i>%1</i> 명령을 시작하지 못했습니다. Internal error when starting command. - + 명령을 시작하는 중에 내부 오류가 발생했습니다. @@ -1876,22 +1880,22 @@ Output: External command failed to finish. - + 외부 명령을 완료하지 못했습니다. Command <i>%1</i> failed to finish in %2 seconds. - + <i>%1</i> 명령을 %2초 안에 완료하지 못했습니다. External command finished with errors. - + 외부 명령이 오류와 함께 완료되었습니다. Command <i>%1</i> finished with exit code %2. - + <i>%1</i> 명령이 종료 코드 %2와 함께 완료되었습니다. @@ -1899,18 +1903,18 @@ Output: Default Keyboard Model - + 기본 키보드 모델 Default - + 기본 unknown - + 알 수 없음 @@ -1948,37 +1952,37 @@ Output: The selected item does not appear to be a valid partition. - + 선택된 항목은 유효한 파티션으로 표시되지 않습니다. %1 cannot be installed on empty space. Please select an existing partition. - + %1은 빈 공간에 설치될 수 없습니다. 존재하는 파티션을 선택해주세요. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1은 확장 파티션에 설치될 수 없습니다. 주 파티션 혹은 논리 파티션을 선택해주세요. %1 cannot be installed on this partition. - + %1은 이 파티션에 설치될 수 없습니다. Data partition (%1) - + 데이터 파티션 (%1) Unknown system partition (%1) - + 알 수 없는 시스템 파티션 (%1) %1 system partition (%2) - + %1 시스템 파티션 (%2) @@ -2000,12 +2004,12 @@ Output: The EFI system partition at %1 will be used for starting %2. - + %1의 EFI 시스템 파티션은 %2의 시작으로 사용될 것입니다. EFI system partition: - + EFI 시스템 파티션: @@ -2013,57 +2017,57 @@ Output: Gathering system information... - + 시스템 정보 수집 중... has at least %1 GB available drive space - + 최소 %1 GB의 여유 공간이 필요합니다. There is not enough drive space. At least %1 GB is required. - + 저장 공간이 충분하지 않습니다. 최소 %1 GB의 공간이 필요합니다. has at least %1 GB working memory - + 최소 %1 GB의 가용 메모리가 필요합니다 The system does not have enough working memory. At least %1 GB is required. - + 이 시스템은 가용 메모리가 충분하지 않습니다. 최소 %1 GB의 가용 메모리가 필요합니다. is plugged in to a power source - + 전원 공급이 연결되어 있습니다 The system is not plugged in to a power source. - + 이 시스템은 전원 공급이 연결되어 있지 않습니다 is connected to the Internet - + 인터넷에 연결되어 있습니다 The system is not connected to the Internet. - + 이 시스템은 인터넷에 연결되어 있지 않습니다. The installer is not running with administrator rights. - + 설치 관리자가 관리자 권한으로 동작하고 있지 않습니다. The screen is too small to display the installer. - + 설치 관리자를 표시하기에 화면이 너무 작습니다. @@ -2094,12 +2098,12 @@ Output: Scanning storage devices... - + 스토리지 장치 검색 중... Partitioning - + 파티셔닝 @@ -2107,29 +2111,29 @@ Output: Set hostname %1 - + 호스트 이름을 %1로 설정합니다 Set hostname <strong>%1</strong>. - + 호스트 이름을 <strong>%1</strong>로 설정합니다. Setting hostname %1. - + 호스트 이름을 %1로 설정하는 중입니다. Internal Error - + 내부 오류 Cannot write hostname to target system - + 시스템의 호스트 이름을 저장할 수 없습니다 @@ -2137,29 +2141,29 @@ Output: Set keyboard model to %1, layout to %2-%3 - + 키보드 모델을 %1로 설정하고, 레이아웃을 %2-%3으로 설정합니다 Failed to write keyboard configuration for the virtual console. - + 가상 콘솔을 위한 키보드 설정을 저장할 수 없습니다. Failed to write to %1 - + %1에 쓰기를 실패했습니다 Failed to write keyboard configuration for X11. - + X11에 대한 키보드 설정을 저장하지 못했습니다. Failed to write keyboard configuration to existing /etc/default directory. - + /etc/default 디렉터리에 키보드 설정을 저장하지 못했습니다. @@ -2293,37 +2297,37 @@ Output: Set timezone to %1/%2 - + 표준시간대를 %1/%2로 설정합니다 Cannot access selected timezone path. - + 선택된 표준시간대 경로에 접근할 수 없습니다. Bad path: %1 - + 잘못된 경로: %1 Cannot set timezone. - + 표준 시간대를 설정할 수 없습니다. Link creation failed, target: %1; link name: %2 - + 링크 생성 실패, 대상: %1; 링크 이름: %2 Cannot set timezone, - + 표준시간대를 설정할 수 없습니다, Cannot open /etc/timezone for writing - + /etc/timezone을 쓰기를 위해 열 수 없습니다. @@ -2331,7 +2335,7 @@ Output: Shell Processes Job - + 셸 처리 작업 @@ -2356,7 +2360,7 @@ Output: Summary - + 요약 @@ -2364,12 +2368,12 @@ Output: Installation feedback - + 설치 피드백 Sending installation feedback. - + 설치 피드백을 보내는 중입니다. @@ -2379,7 +2383,7 @@ Output: HTTP request timed out. - + HTTP 요청 시간이 만료되었습니다. @@ -2387,28 +2391,28 @@ Output: Machine feedback - + 장치 피드백 Configuring machine feedback. - + 장치 피드백을 설정하는 중입니다. Error in machine feedback configuration. - + 장치 피드백 설정 중에 오류가 발생했습니다. Could not configure machine feedback correctly, script error %1. - + 장치 피드백을 정확하게 설정할 수 없습니다, %1 스크립트 오류. Could not configure machine feedback correctly, Calamares error %1. - + 장치 피드백을 정확하게 설정할 수 없습니다, %1 깔라마레스 오류. @@ -2440,7 +2444,7 @@ Output: ... - + ... @@ -2473,7 +2477,7 @@ Output: Feedback - + 피드백 @@ -2481,33 +2485,33 @@ Output: Your username is too long. - + 사용자 이름이 너무 깁니다. Your username contains invalid characters. Only lowercase letters and numbers are allowed. - + 사용자 이름이 유효하지 않은 문자들을 포함하고 있습니다. 소문자 그리고 숫자만이 허용됩니다. Your hostname is too short. - + 호스트 이름이 너무 짧습니다. Your hostname is too long. - + 호스트 이름이 너무 깁니다. Your hostname contains invalid characters. Only letters, numbers and dashes are allowed. - + 호트스 이름이 유효하지 않은 문자들을 포함하고 있습니다. 영문자, 숫자 그리고 붙임표(-)만이 허용됩니다. Your passwords do not match! - + 암호가 일치하지 않습니다! @@ -2515,7 +2519,7 @@ Output: Users - + 사용자 @@ -2528,42 +2532,42 @@ Output: &Language: - + 언어(&L): &Release notes - + 출시 정보(&R) &Known issues - + 알려진 문제(&K) &Support - + 지원(&S) &About - + 정보(&A) <h1>Welcome to the %1 installer.</h1> - + <h1>%1 설치 관리자에 오신 것을 환영합니다.</h1> <h1>Welcome to the Calamares installer for %1.</h1> - + <h1>%1을 위한 깔라마레스 설치 관리자에 오신 것을 환영합니다.</h1> About %1 installer - + %1 설치 관리자에 대하여 @@ -2573,7 +2577,7 @@ Output: %1 support - + %1 지원 @@ -2581,7 +2585,7 @@ Output: Welcome - + 환영합니다 \ No newline at end of file From 5c6d88b1b87f083d361e7353961bcee85976f6b5 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Sat, 16 Jun 2018 19:27:44 -0400 Subject: [PATCH 02/29] i18n: [desktop] Automatic merge of Transifex translations --- calamares.desktop | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/calamares.desktop b/calamares.desktop index c1c8d44e2..42373404d 100644 --- a/calamares.desktop +++ b/calamares.desktop @@ -63,6 +63,7 @@ Comment[he]=קלמארס - אשף התקנה Icon[hi]=calamares GenericName[hi]=सिस्टम इंस्टॉलर Comment[hi]=Calamares — सिस्टम इंस्टॉलर +Name[hi]=सिस्टम इंस्टॉल करें Icon[hr]=calamares GenericName[hr]=Instalacija sustava Comment[hr]=Calamares — Instalacija sustava @@ -87,6 +88,10 @@ Icon[ja]=calamares GenericName[ja]=システムインストーラー Comment[ja]=Calamares — システムインストーラー Name[ja]=システムをインストール +Icon[ko]=깔라마레스 +GenericName[ko]=시스템 설치 관리자 +Comment[ko]=깔라마레스 — 시스템 설치 관리자 +Name[ko]=시스템 설치 Icon[lt]=calamares GenericName[lt]=Sistemos diegimas į kompiuterį Comment[lt]=Calamares — Sistemos diegimo programa From 88c168e6d5275bf7eb83bed7011f2ae46b792240 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Sat, 16 Jun 2018 19:27:46 -0400 Subject: [PATCH 03/29] i18n: [dummypythonqt] Automatic merge of Transifex translations --- .../lang/hi/LC_MESSAGES/dummypythonqt.mo | Bin 1009 -> 1262 bytes .../lang/hi/LC_MESSAGES/dummypythonqt.po | 10 +++++----- .../lang/ko/LC_MESSAGES/dummypythonqt.mo | Bin 413 -> 985 bytes .../lang/ko/LC_MESSAGES/dummypythonqt.po | 13 +++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo index a294004cbabf226319670a94a72e1765f5428d68..a7249ce6fbc691a8fd00142b4c330ccc27cd304e 100644 GIT binary patch delta 480 zcmey!{*H4(idrcH1A_!J1A`Wj?gP@9Kzb*THU-kkEDQ`&fOI6w#x5;JE>m423k3rc zD^v5$`xv7blO8Nt_+ZJp2TL0i9xPe)V9CA*OWGeSS^8kf3NU|Z?}H^99xR#q0Ls|^ zV99!*BA^^l2&AR;!IG^Hmh1q_19gF9c05?p^kB&vFu5G4YO*J@eLaQN%mO=OG2HZN zU<;v6S@vKl(9J+0Albx#)uwtvJ_2e3nzj>Y0eQi(^TE=N2TPZr>4yiOIY#)QhZ0aH PLikb@p1A_!J1A`Wjjs?=t7*{Oh4|IP, 2018\n" "Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/)\n" @@ -28,16 +28,16 @@ msgstr "नया QLabel।" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" -msgstr "Dummy PythonQt ViewStep" +msgstr "डमी पाइथन प्रक्रिया की चरण संख्या देखें" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" -msgstr "The Dummy PythonQt Job" +msgstr "डमी पाइथन प्रक्रिया" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" -msgstr "यह Dummy PythonQt Job है।The dummy job says: {}" +msgstr "यह डमी पाइथन प्रक्रिया है। डमी प्रक्रिया संबंधी संदेश : {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." -msgstr "Dummy PythonQt Job के लिए एक status संदेश।" +msgstr "डमी पाइथन प्रक्रिया की अवस्था संबंधी संदेश।" diff --git a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo index 9dfa007bded575a5934de04c1ed37c5ebb18a03d..c4dfacd9243d1590fbee2a78166ab309515922d6 100644 GIT binary patch delta 641 zcmZvY-%C_M6vrpml87GC$cP?}PZ{JzeF#wr#h_SvNLtFr?&hdh_ug4{Mr4UtmsOB< zBNkRN*((WI2t`7htl*>I-{6aXz|Ji6+*9AtSn|i=e&&15oOAA+nJ{wDk~wT`US_Zs za2v$H6;J@ys^BWv0i9qUTn4{EJNN@`fYu9)-G|&nKlbj|* ziXP7Tewv=9)szTE6-7ndVIv9e)eNdSn9aKXrJs9z?wR6A7MtSdv|`(ngioEDcF4Ak zADuWY;w0U)?5Ednihb_~r0R;L+(0H=B~twq^|~IXxd`Zy=hI+PU~n<%`9lrQ3AlQ2 zk9xa%`igr88IxPm>t(ZAY1~%7E9oEA6E`#A3YlECo-32yESY@Se4S_J!?#*>OKuiIuRWc@iWzUO0%}8^GiDa*&!2F=wF*n*h#j_`qPF9 Y=LrQSEYyDPQf=#_dHd_Q$G!~v3v1rh`2C0F8$?=T+lXaM`0RRp> B2cZA} diff --git a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po index 94b78e28a..aa8ea2265 100644 --- a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po +++ b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.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: Ji-Hyeon Gim , 2018\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" @@ -19,24 +20,24 @@ msgstr "" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" -msgstr "" +msgstr "여기를 클릭하세요!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." -msgstr "" +msgstr "새로운 QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" -msgstr "" +msgstr "더미 PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" -msgstr "" +msgstr "더미 PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" -msgstr "" +msgstr "더미 PythonQt Job입니다. 이 더미 Job의 출력은 다음과 같습니다: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." -msgstr "" +msgstr "더미 PythonQt Job의 상태 메시지" From 93aa0f3c850432c118ca24c20dd3f698ef3c22de Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Sat, 16 Jun 2018 19:27:46 -0400 Subject: [PATCH 04/29] i18n: [python] Automatic merge of Transifex translations --- lang/python/hi/LC_MESSAGES/python.mo | Bin 1363 -> 1637 bytes lang/python/hi/LC_MESSAGES/python.po | 10 +++++----- lang/python/ko/LC_MESSAGES/python.mo | Bin 413 -> 1238 bytes lang/python/ko/LC_MESSAGES/python.po | 17 +++++++++-------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lang/python/hi/LC_MESSAGES/python.mo b/lang/python/hi/LC_MESSAGES/python.mo index 5504f771576dcfb266632cc13284f05d9b5d25aa..5c85ef863df603616008c0d3498aab92779d28cc 100644 GIT binary patch delta 572 zcmbV{ze)o^5XR@cQ=@2MG>w1Y8bJ_IPzx(dQ7lBTvr!U3FtJE1BuG>w7Yk82lET6u znKMU_C(0Mr7hP)oN%DESMt>wrI@h1^ARkl@E8((u`?hdN_(|9i_JneFzWxin!t2BU delta 251 zcmaFLbD69Do)F7a1|Z-7Vi_Qg0b*_-o&&@nZ~}-0f%qg4ivaO$DE$FQgTz@G85m4} zv^bE~2GTx2+5kvb0O`d*yb_2(>U^0Y`s0DLGLT;aq)izZ+!$s68LNN-=YVtwkgjB5 zU}ypHfizGr13M720x?jUfena(!eGY&DF!AG0Rj{6KG}SoaS7wZhw8$)iOCt6d8xXY gDGKSSd8tK-C8?VoS)>@*3ySiSQ;Uly7qG4d01#p%<^TWy diff --git a/lang/python/hi/LC_MESSAGES/python.po b/lang/python/hi/LC_MESSAGES/python.po index a2a8bb3d4..d9f42caca 100644 --- a/lang/python/hi/LC_MESSAGES/python.po +++ b/lang/python/hi/LC_MESSAGES/python.po @@ -20,24 +20,24 @@ msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." -msgstr "" +msgstr "फ़ाइल सिस्टम माउंट से हटाएँ।" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." -msgstr "Dummy python job." +msgstr "डमी पाइथन प्रक्रिया ।" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" -msgstr "Dummy python step {}" +msgstr "डमी पाइथन प्रक्रिया की चरण संख्या {}" #: src/modules/machineid/main.py:35 msgid "Generate machine-id." -msgstr "machine-id generate करें।" +msgstr "मशीन-आईडी उत्पन्न करें।" #: src/modules/packages/main.py:61 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "पैकेज (%(count)d / %(total)d) process किए जा रहे हैं" +msgstr "पैकेज (%(count)d / %(total)d) संसाधित किए जा रहे हैं" #: src/modules/packages/main.py:63 src/modules/packages/main.py:73 msgid "Install packages." diff --git a/lang/python/ko/LC_MESSAGES/python.mo b/lang/python/ko/LC_MESSAGES/python.mo index 9dfa007bded575a5934de04c1ed37c5ebb18a03d..a11c754cfe14e945c70248ffedef5c9019c5d33b 100644 GIT binary patch literal 1238 zcmah{TWb?R6khKd@Ig@!Q8*74Qgn8=rE1t(F}ATrjVUn-`nGPS>DuhfvNN#;5kymv zrh>O(k)$X@t5EUQ2L)gJ3%>X!`r4g5`3F4Pn@SZAe0+1xocqkzt!pPVlud|Thyr3W zVg?b(H^dgicf>Ztk44_NYQer6xeILu@?PWuvWa{Lc{}naEWWv{)kbcaC$0e7enQP5H*h_}TZUS<*<4QPu?j)mF_?OKj{{PK$Q%hr|2&oVE{ z1A}gff~ep;-a^Ss)R81zAm?ZxT+S>QNcNsg_NU-nDt9KGJsrzYp9hj;MA0pfqvfI? zd2T^$Ae$$>0ktItkv?3B1)XL`f|&bBX9CPFYyUxFc9|wRk{rG4M#&fb&Zm+&lF5?3 zBplCLne^TZ+0&`mDO*UA4{Rn%w&Z~YCtPy8Lh(8JT@McVIJ)FT*E_O&(ixS9_sy5Z zXjUxa@=2cBo&_g4w#FbnB&9Db!x$ME(Pfm|9i&%uhkJ%&mu$}ts4yf(2&2<94|EvA z+-Q$w(wWq+eRSw%td}!M8MasPaZX9ENW(ALF6#zo$PNURJ!kXBNaB}YRBDh0B*h$F zz<07BanY5_U0N{AV*{mfV3)`-9(ck6=Fh95r=uGdjy+~~Obc&62w%O2*7&$;%&OZn zpr-Dshokz+i?H^5?p-zdq-yG^`Y;Kq)(GEK)zqEv=|@mE8>;%IHSr>>-3n_>U2Ba$ zZ{29B>FeSBrfO6{Rht;}o5SKCntNSWjY(|a@9vY~*aJ|_yJ~9mpPAoIhRkv-gQjca^WACFKv?gZN`2C0F8$=4YBCog8Y1^^P9 B2#x>% diff --git a/lang/python/ko/LC_MESSAGES/python.po b/lang/python/ko/LC_MESSAGES/python.po index 7ac2b3d4d..a880b2af1 100644 --- a/lang/python/ko/LC_MESSAGES/python.po +++ b/lang/python/ko/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: Ji-Hyeon Gim , 2018\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" @@ -19,37 +20,37 @@ msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." -msgstr "" +msgstr "파일 시스템 마운트를 해제합니다." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." -msgstr "" +msgstr "더미 파이썬 작업." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" -msgstr "" +msgstr "더미 파이썬 단계 {}" #: src/modules/machineid/main.py:35 msgid "Generate machine-id." -msgstr "" +msgstr "장치 식별자를 생성합니다." #: src/modules/packages/main.py:61 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" +msgstr "패키지들을 처리하는 중입니다 (%(count)d / %(total)d)" #: src/modules/packages/main.py:63 src/modules/packages/main.py:73 msgid "Install packages." -msgstr "" +msgstr "패키지들을 설치합니다." #: src/modules/packages/main.py:66 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "" +msgstr[0] "%(num)d개의 패키지들을 설치하는 중입니다." #: src/modules/packages/main.py:69 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "" +msgstr[0] "%(num)d개의 패키지들을 제거하는 중입니다." From 25533c4dcea40829d2e2cdd4638bb2e0c00f2bbc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 16 Jun 2018 19:40:23 -0400 Subject: [PATCH 05/29] i18n: Update language lists with Korean and current stats --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 32cd8ab3c..fa6f38c91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,11 +82,11 @@ set( CALAMARES_VERSION_RC 0 ) # checks for new languages and misspelled ones are done (that is, # copy these four lines to four backup lines, add "p", and then update # the original four lines with the current translations). -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 ko ) +set( _tx_complete ca zh_TW hr cs_CZ da et fr id it_IT lt pl pt_PT es_MX tr_TR ) +set( _tx_good sq de pt_BR zh_CN ja ro es sk ) +set( _tx_ok hu ru he nl bg uk ast is ko ar sv el gl en_GB + th fi_FI hi eu nb sr sl sr@latin mr es_PR kn kk be ) +set( _tx_bad fr_CH gu lo fa ur uz eo ) ### Required versions From 18bd455ae1c07b0355cde105d58841b6c52f67c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= Date: Sun, 17 Jun 2018 07:47:58 +0200 Subject: [PATCH 06/29] [bootloader] make paths for executable optional and adjustable --- src/modules/bootloader/bootloader.conf | 6 ++++-- src/modules/bootloader/main.py | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/modules/bootloader/bootloader.conf b/src/modules/bootloader/bootloader.conf index def686262..ee8680f72 100644 --- a/src/modules/bootloader/bootloader.conf +++ b/src/modules/bootloader/bootloader.conf @@ -21,12 +21,14 @@ timeout: "10" # 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. +# GRUB functionality (notably grub-probe) to work. As needed, you may use +# complete paths like `/usr/bin/efibootmgr` for the executables. # grubInstall: "grub-install" grubMkconfig: "grub-mkconfig" grubCfg: "/boot/grub/grub.cfg" -grubProbe: "/usr/sbin/grub2-probe" +grubProbe: "grub-probe" +efiBootMgr: "efibootmgr" # Optionally set the bootloader ID to use for EFI. This is passed to # grub-install --bootloader-id. diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 1abee68f7..dec0bda4b 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -8,7 +8,7 @@ # Copyright 2014, Daniel Hillenbrand # Copyright 2014, Benjamin Vaudour # Copyright 2014, Kevin Kofler -# Copyright 2015-2017, Philip Mueller +# Copyright 2015-2018, Philip Mueller # Copyright 2016-2017, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2017-2018, Adriaan de Groot @@ -351,7 +351,7 @@ def install_secureboot(efi_directory): raise ValueError("No partition number found for %s" % install_efi_directory) subprocess.call([ - "/usr/sbin/efibootmgr", + libcalamares.job.configuration["efiBootMgr"], "-c", "-w", "-L", efi_bootloader_id, From 1bd149c14e98277ae40f5d41503e5ace9a046274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= Date: Sun, 17 Jun 2018 12:53:31 +0200 Subject: [PATCH 07/29] [packages] add initial support for update target system --- src/modules/packages/main.py | 48 ++++++++++++++++++++++++++++-- src/modules/packages/packages.conf | 4 ++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index d9741287b..0190d474f 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -8,6 +8,7 @@ # Copyright 2016-2017, Kyle Robbertze # Copyright 2017, Alf Gaida # Copyright 2018, Adriaan de Groot +# Copyright 2018, Philip Müller # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -153,6 +154,9 @@ class PMPackageKit(PackageManager): def update_db(self): check_target_env_call(["pkcon", "refresh"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass class PMZypp(PackageManager): backend = "zypp" @@ -170,6 +174,9 @@ class PMZypp(PackageManager): def update_db(self): check_target_env_call(["zypper", "--non-interactive", "update"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass class PMYum(PackageManager): backend = "yum" @@ -185,6 +192,9 @@ class PMYum(PackageManager): # Doesn't need updates pass + def update_system(self): + # Doesn't need to update the system explicitly + pass class PMDnf(PackageManager): backend = "dnf" @@ -199,7 +209,11 @@ class PMDnf(PackageManager): "remove"] + pkgs) def update_db(self): - # Doesn't need to update explicitly + # Doesn't need updates + pass + + def update_system(self): + # Doesn't need to update the system explicitly pass @@ -218,6 +232,10 @@ class PMUrpmi(PackageManager): def update_db(self): check_target_env_call(["urpmi.update", "-a"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass + class PMApt(PackageManager): backend = "apt" @@ -234,6 +252,10 @@ class PMApt(PackageManager): def update_db(self): check_target_env_call(["apt-get", "update"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass + class PMPacman(PackageManager): backend = "pacman" @@ -242,7 +264,7 @@ class PMPacman(PackageManager): if from_local: pacman_flags = "-U" else: - pacman_flags = "-Sy" + pacman_flags = "-S" check_target_env_call(["pacman", pacman_flags, "--noconfirm"] + pkgs) @@ -253,6 +275,9 @@ class PMPacman(PackageManager): def update_db(self): check_target_env_call(["pacman", "-Sy"]) + def update_system(self): + check_target_env_call(["pacman", "-Su"]) + class PMPortage(PackageManager): backend = "portage" @@ -267,6 +292,10 @@ class PMPortage(PackageManager): def update_db(self): check_target_env_call(["emerge", "--sync"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass + class PMEntropy(PackageManager): backend = "entropy" @@ -280,6 +309,10 @@ class PMEntropy(PackageManager): def update_db(self): check_target_env_call(["equo", "update"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass + class PMDummy(PackageManager): backend = "dummy" @@ -293,6 +326,9 @@ class PMDummy(PackageManager): def update_db(self): libcalamares.utils.debug("Updating DB") + def update_system(self): + libcalamares.utils.debug("Updating System") + def run(self, script): libcalamares.utils.debug("Running script '" + str(script) + "'") @@ -309,6 +345,10 @@ class PMPisi(PackageManager): def update_db(self): check_target_env_call(["pisi", "update-repo"]) + def update_system(self): + # Doesn't need to update the system explicitly + pass + # Collect all the subclasses of PackageManager defined above, # and index them based on the backend property of each class. @@ -452,6 +492,10 @@ def run(): if update_db and libcalamares.globalstorage.value("hasInternet"): pkgman.update_db() + update_system = libcalamares.job.configuration.get("update_system", False) + if update_system and libcalamares.globalstorage.value("hasInternet"): + pkgman.update_system() + operations = libcalamares.job.configuration.get("operations", []) if libcalamares.globalstorage.contains("packageOperations"): operations += libcalamares.globalstorage.value("packageOperations") diff --git a/src/modules/packages/packages.conf b/src/modules/packages/packages.conf index ae141ee3a..84446257e 100644 --- a/src/modules/packages/packages.conf +++ b/src/modules/packages/packages.conf @@ -26,9 +26,11 @@ backend: dummy # You can run a package-manager specific update procedure # before installing packages (for instance, to update the # list of packages and dependencies); this is done only if there -# is an internet connection. Set *update_db* to true to do so. +# is an internet connection. Set *update_db* and/or *update_system* +# to true to do so. skip_if_no_internet: false update_db: true +update_system: false # # List of maps with package operations such as install or remove. From c600c3eccaa20b56f2f86396ad6c80e18fc8a949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= Date: Sun, 17 Jun 2018 13:10:59 +0200 Subject: [PATCH 08/29] [packages] update documentation to reflect 'update_db' and 'update_system' differences --- src/modules/packages/packages.conf | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/modules/packages/packages.conf b/src/modules/packages/packages.conf index 84446257e..2b1942ea3 100644 --- a/src/modules/packages/packages.conf +++ b/src/modules/packages/packages.conf @@ -16,18 +16,25 @@ backend: dummy # Often package installation needs an internet connection. # Since you may allow system installation without a connection -# and want to offer **optional** package installation, it's +# and want to offer OPTIONAL package installation, it's # possible to have no internet, yet have this packages module # enabled in settings. # # You can skip the whole module when there is no internet -# by setting *skip_if_no_internet* to true. +# by setting "skip_if_no_internet" to true. # # You can run a package-manager specific update procedure # before installing packages (for instance, to update the # list of packages and dependencies); this is done only if there -# is an internet connection. Set *update_db* and/or *update_system* -# to true to do so. +# is an internet connection. +# +# Set "update_db" to 'true' for refreshing the database on the +# target system. +# +# On target installations, which got installed by unsquashing +# a full system update is may be needed, to be able to post-install +# additional packages. Therefore set also "update_system" to 'true'. +# skip_if_no_internet: false update_db: true update_system: false @@ -88,14 +95,14 @@ update_system: false # # - if the system locale is English (any variety), then the package is not # installed at all, -# - otherwise $LOCALE or ${LOCALE} is replaced by the **lower-cased** BCP47 -# name of the **language** part of the selected system locale (not the -# country/region/dialect part), e.g. selecting *nl_BE* will use *nl* +# - otherwise $LOCALE or ${LOCALE} is replaced by the 'lower-cased' BCP47 +# name of the 'language' part of the selected system locale (not the +# country/region/dialect part), e.g. selecting "nl_BE" will use "nl" # here. # # Take care that just plain LOCALE will not be replaced, so foo-LOCALE will # be left unchanged, while foo-$LOCALE will be changed. However, foo-LOCALE -# **will** be removed from the list of packages, if English is selected. +# 'will' be removed from the list of packages, if English is selected. # # The following installs localizations for vi, if they are relevant; if # there is no localization, installation continues normally. From 3a3a4ec36387cf5a763f93ccf97f2514544c242e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= Date: Sun, 17 Jun 2018 13:15:55 +0200 Subject: [PATCH 09/29] [packages] update documentation --- src/modules/packages/packages.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/modules/packages/packages.conf b/src/modules/packages/packages.conf index 2b1942ea3..974ba07a7 100644 --- a/src/modules/packages/packages.conf +++ b/src/modules/packages/packages.conf @@ -14,6 +14,7 @@ # backend: dummy +# # Often package installation needs an internet connection. # Since you may allow system installation without a connection # and want to offer OPTIONAL package installation, it's @@ -29,11 +30,10 @@ backend: dummy # is an internet connection. # # Set "update_db" to 'true' for refreshing the database on the -# target system. -# -# On target installations, which got installed by unsquashing -# a full system update is may be needed, to be able to post-install -# additional packages. Therefore set also "update_system" to 'true'. +# target system. On target installations, which got installed by +# unsquashing, a full system update may be needed. Otherwise +# post-installing additional packages may result in conflicts. +# Therefore set also "update_system" to 'true'. # skip_if_no_internet: false update_db: true From 22cdc37caa567323d20e7afbbd03669949624b0d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 07:17:42 -0400 Subject: [PATCH 10/29] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 26 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 17 +++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..9a2204613 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,26 @@ +--- +name: Bug report +about: Create a report to help us improve + +--- + +> Hi! Thank you for helping improve Calamares. If you are seeing a problem in installing a specific distribution, you should **probably** report the problem in the distribution's bug tracker, first. That helps filter out issues with packaging, mis-configuration, etc. that Calamares has no control over. If you are a distribution packager or maintainer, this page is for you. + +**Describe the bug** +A clear and concise description of what the bug is. Please include 32/64 bit machine details, EFI/BIOS details, and disk setup. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots and Logs** +If applicable, add screenshots to help explain your problem. Calamares has an installation log (usually `~/.cache/calamares/session.log`), please check it for confidential information and attach it if possible. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..066b2d920 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 391d63936fba6a8699968b6b56358d1c13813ab1 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 07:19:30 -0400 Subject: [PATCH 11/29] Drop older issue template now that the new (multi) templates are in use. --- .github/ISSUE_TEMPLATE.md | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index a498694d2..000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,29 +0,0 @@ -#### Submission type - - - [ ] Bug report - - [ ] Feature Request - - -#### Info regarding which version of Calamares is used, which Distribution - -> … - -#### Provide information on how the disks are set up, in detail, with full logs of commands issued - -> … - -#### What do you expect to have happen when Calamares installs? - -> … - -#### Describe the issue you encountered - -> … - -#### Steps to reproduce the problem - -> … - -#### Include the installation.log (usually ~/Calamares/Calamares/Calamares.log, of the user Calamares runs as): - -> … From 9d17e7210a3578d3333e182780bfd31a1ef1bc55 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 13:28:35 +0200 Subject: [PATCH 12/29] [partition] Change shortcut for "Create" to 'a' Untangle the shortcuts; Create and Cancel had an overlap. Skip 'r' (Revert all changes) and 'e' (Edit) and settle on 'a' (which might also mean "Add"). FIXES #977 --- src/modules/partition/gui/PartitionPage.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/gui/PartitionPage.ui b/src/modules/partition/gui/PartitionPage.ui index 7d24204c9..67ac4fb2d 100644 --- a/src/modules/partition/gui/PartitionPage.ui +++ b/src/modules/partition/gui/PartitionPage.ui @@ -104,7 +104,7 @@ - &Create + Cre&ate From c822627becd9afb1c839d30373d59840bfc8533d Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 18 Jun 2018 07:43:28 -0400 Subject: [PATCH 13/29] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_es_MX.ts | 16 ++++++++-------- lang/calamares_ru.ts | 30 ++++++++++++++++-------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/lang/calamares_es_MX.ts b/lang/calamares_es_MX.ts index 657507b9d..ddb6247d7 100644 --- a/lang/calamares_es_MX.ts +++ b/lang/calamares_es_MX.ts @@ -343,7 +343,7 @@ El instalador terminará y se perderán todos los cambios. %1 will be shrunk to %2MB and a new %3MB partition will be created for %4. - %1 será reducido a %2MB y una nueva partición de %3MB será creado para %4. + %1 será reducido a %2MB y una nueva partición %3MB will be created for %4. @@ -439,12 +439,12 @@ El instalador terminará y se perderán todos los cambios. Clear mounts for partitioning operations on %1 - Despejar puntos de montaje para operaciones de particionamiento en %1 + Borrar puntos de montaje para operaciones de particionamiento en %1 Clearing mounts for partitioning operations on %1. - Despejando puntos de montaje para operaciones de particionamiento en %1 + Borrando puntos de montaje para operaciones de particionamiento en %1. @@ -499,7 +499,7 @@ El instalador terminará y se perderán todos los cambios. Contextual Processes Job - Tareas de procesos contextuales. + Tareas de procesos contextuales @@ -507,7 +507,7 @@ El instalador terminará y se perderán todos los cambios. Create a Partition - Crear una partición + Crear una Partición @@ -636,7 +636,7 @@ El instalador terminará y se perderán todos los cambios. Create new %1 partition table on %2. - Crear nueva tabla de particiones %1 en %2 + Crear nueva tabla de partición %1 en %2. @@ -878,7 +878,7 @@ El instalador terminará y se perderán todos los cambios. Install %1 on <strong>new</strong> %2 system partition. - Instalar %1 en <strong>nueva</strong> partición de sistema %2. + Instalar %1 en <strong>nueva</strong> %2 partición de sistema. @@ -1714,7 +1714,7 @@ El instalador terminará y se perderán todos los cambios. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Borrar</strong> el disco <strong>%2<strong> (%3) e instalar %1. + <strong>Borrar</strong> el disco <strong>%2<strong> (%3) e instalar %1. diff --git a/lang/calamares_ru.ts b/lang/calamares_ru.ts index 4eb4ec417..ba9f715ff 100644 --- a/lang/calamares_ru.ts +++ b/lang/calamares_ru.ts @@ -1325,12 +1325,12 @@ The installer will quit and all changes will be lost. The password contains less than %1 character classes - + Пароль содержит менее %1 классов символов The password does not contain enough character classes - + Пароль содержит недостаточно классов символов @@ -1345,27 +1345,27 @@ The installer will quit and all changes will be lost. The password contains more than %1 characters of the same class consecutively - + Пароль содержит более %1 символов одного и того же класса последовательно The password contains too many characters of the same class consecutively - + Пароль содержит слишком длинную последовательность символов одного и того же класса The password contains monotonic sequence longer than %1 characters - + Пароль содержит монотонную последовательность длиннее %1 символов The password contains too long of a monotonic character sequence - + Пароль содержит слишком длинную монотонную последовательность символов No password supplied - + Не задан пароль @@ -1841,7 +1841,9 @@ There was no output from the command. Output: - + +Вывод: + @@ -1856,17 +1858,17 @@ Output: External command failed to start. - + Не удалось запустить внешнюю команду. Command <i>%1</i> failed to start. - + Не удалось запустить команду <i>%1</i>. Internal error when starting command. - + Внутренняя ошибка при запуске команды. @@ -1876,7 +1878,7 @@ Output: External command failed to finish. - + Не удалось завершить внешнюю команду. @@ -2364,12 +2366,12 @@ Output: Installation feedback - + Отчёт об установке Sending installation feedback. - + Отправка отчёта об установке. From 15e9edca7019f65c76ad3cddba2a7136e08db930 Mon Sep 17 00:00:00 2001 From: Kevin Kofler Date: Mon, 18 Jun 2018 13:52:07 +0200 Subject: [PATCH 14/29] [packages]: Implement update_system for pkcon, yum, dnf Also make install for yum and dnf follow the documented syntax: options (-y) before the command (install), even though yum and dnf also accept the other order. This also makes it consistent with remove. --- src/modules/packages/main.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index 0190d474f..bffd6a945 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -155,8 +155,7 @@ class PMPackageKit(PackageManager): check_target_env_call(["pkcon", "refresh"]) def update_system(self): - # Doesn't need to update the system explicitly - pass + check_target_env_call(["pkcon", "-py", "update"]) class PMZypp(PackageManager): backend = "zypp" @@ -182,7 +181,7 @@ class PMYum(PackageManager): backend = "yum" def install(self, pkgs, from_local=False): - check_target_env_call(["yum", "install", "-y"] + pkgs) + check_target_env_call(["yum", "-y", "install"] + pkgs) def remove(self, pkgs): check_target_env_call(["yum", "--disablerepo=*", "-C", "-y", @@ -193,14 +192,13 @@ class PMYum(PackageManager): pass def update_system(self): - # Doesn't need to update the system explicitly - pass + check_target_env_call(["yum", "-y", "upgrade"]) class PMDnf(PackageManager): backend = "dnf" def install(self, pkgs, from_local=False): - check_target_env_call(["dnf", "install", "-y"] + pkgs) + check_target_env_call(["dnf", "-y", "install"] + pkgs) def remove(self, pkgs): # ignore the error code for now because dnf thinks removing a @@ -213,8 +211,7 @@ class PMDnf(PackageManager): pass def update_system(self): - # Doesn't need to update the system explicitly - pass + check_target_env_call(["dnf", "-y", "upgrade"]) class PMUrpmi(PackageManager): From 60ab5dd3cf9ad3372c2915759d35955a3957d9b2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 08:38:20 -0400 Subject: [PATCH 15/29] Update issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 9a2204613..3415b4cd4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,11 +1,8 @@ --- name: Bug report -about: Create a report to help us improve +about: Hi! Thank you for helping improve Calamares. If you are seeing a problem in installing a specific distribution, you should **probably** report the problem in the distribution's bug tracker, first. That helps filter out issues with packaging, mis-configuration, etc. that Calamares has no control over. If you are a distribution packager or maintainer, this page is for you. --- - -> Hi! Thank you for helping improve Calamares. If you are seeing a problem in installing a specific distribution, you should **probably** report the problem in the distribution's bug tracker, first. That helps filter out issues with packaging, mis-configuration, etc. that Calamares has no control over. If you are a distribution packager or maintainer, this page is for you. - **Describe the bug** A clear and concise description of what the bug is. Please include 32/64 bit machine details, EFI/BIOS details, and disk setup. From 398b6be4baef280a58bfd69c29f1572df50ceb07 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 10:24:35 -0400 Subject: [PATCH 16/29] Update issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 5 +- lang/calamares_en.ts | 227 ++++++++++-------- lang/python.pot | 34 +-- .../dummypythonqt/lang/dummypythonqt.pot | 18 +- 4 files changed, 156 insertions(+), 128 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 3415b4cd4..9a2204613 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,8 +1,11 @@ --- name: Bug report -about: Hi! Thank you for helping improve Calamares. If you are seeing a problem in installing a specific distribution, you should **probably** report the problem in the distribution's bug tracker, first. That helps filter out issues with packaging, mis-configuration, etc. that Calamares has no control over. If you are a distribution packager or maintainer, this page is for you. +about: Create a report to help us improve --- + +> Hi! Thank you for helping improve Calamares. If you are seeing a problem in installing a specific distribution, you should **probably** report the problem in the distribution's bug tracker, first. That helps filter out issues with packaging, mis-configuration, etc. that Calamares has no control over. If you are a distribution packager or maintainer, this page is for you. + **Describe the bug** A clear and concise description of what the bug is. Please include 32/64 bit machine details, EFI/BIOS details, and disk setup. diff --git a/lang/calamares_en.ts b/lang/calamares_en.ts index 8bd9c5bda..54a23b4e7 100644 --- a/lang/calamares_en.ts +++ b/lang/calamares_en.ts @@ -1,4 +1,6 @@ - + + + BootInfoWidget @@ -45,6 +47,14 @@ %1 (%2) + + Calamares::BlankViewStep + + + Blank Page + + + Calamares::DebugWindow @@ -97,7 +107,7 @@ Calamares::ExecutionViewStep - + Install Install @@ -105,7 +115,7 @@ Calamares::JobThread - + Done Done @@ -113,12 +123,12 @@ Calamares::ProcessJob - + Run command %1 %2 Run command %1 %2 - + Running command %1 %2 Running command %1 %2 @@ -126,32 +136,32 @@ Calamares::PythonJob - + Running %1 operation. Running %1 operation. - + Bad working directory path Bad working directory path - + Working directory %1 for python job %2 is not readable. Working directory %1 for python job %2 is not readable. - + Bad main script file Bad main script file - + Main script file %1 for python job %2 is not readable. Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". Boost.Python error in job "%1". @@ -159,97 +169,112 @@ Calamares::ViewManager - + &Back &Back - - + + &Next &Next - - + + &Cancel &Cancel - - + + Cancel installation without changing the system. Cancel installation without changing the system. - + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + &Install &Install - + Cancel installation? Cancel installation? - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - + &Yes &Yes - + &No &No - + &Close &Close - + Continue with setup? Continue with setup? - + The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> - + &Install now &Install now - + Go &back Go &back - + &Done &Done - + The installation is complete. Close the installer. The installation is complete. Close the installer. - + Error Error - + Installation Failed Installation Failed @@ -436,17 +461,17 @@ The installer will quit and all changes will be lost. ClearMountsJob - + Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Cleared all mounts for %1 @@ -554,27 +579,27 @@ The installer will quit and all changes will be lost. Si&ze: - + En&crypt En&crypt - + Logical Logical - + Primary Primary - + GPT GPT - + Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. @@ -776,7 +801,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -834,7 +859,7 @@ The installer will quit and all changes will be lost. Flags: - + Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. @@ -1003,12 +1028,12 @@ The installer will quit and all changes will be lost. KeyboardPage - + Set keyboard model to %1.<br/> Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. Set keyboard layout to %1/%2. @@ -1052,64 +1077,64 @@ The installer will quit and all changes will be lost. Form - + I accept the terms and conditions above. I accept the terms and conditions above. - + <h1>License Agreement</h1>This setup procedure will install proprietary software that is subject to licensing terms. <h1>License Agreement</h1>This setup procedure will install proprietary software that is subject to licensing terms. - + Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, the setup procedure cannot continue. Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, the setup procedure cannot continue. - + <h1>License Agreement</h1>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. <h1>License Agreement</h1>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + <a href="%1">view license agreement</a> <a href="%1">view license agreement</a> @@ -1583,34 +1608,34 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Free Space - - + + New partition New partition - + Name Name - + File System File System - + Mount Point Mount Point - + Size Size @@ -1639,8 +1664,8 @@ The installer will quit and all changes will be lost. - &Create - &Create + Cre&ate + @@ -1658,17 +1683,17 @@ The installer will quit and all changes will be lost. Install boot &loader on: - + Are you sure you want to create a new partition table on %1? Are you sure you want to create a new partition table on %1? - + Can not create new partition Can not create new partition - + The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. @@ -1676,97 +1701,97 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Gathering system information... - + Partitions Partitions - + Install %1 <strong>alongside</strong> another operating system. Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Current: - + After: After: - + No EFI system partition configured No EFI system partition configured - + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. - + EFI system partition flag not set EFI system partition flag not set - + An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. - + Boot partition not encrypted Boot partition not encrypted - + A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. @@ -1912,22 +1937,22 @@ Output: Default - + unknown unknown - + extended extended - + unformatted unformatted - + swap swap @@ -2109,29 +2134,29 @@ Output: SetHostNameJob - + Set hostname %1 Set hostname %1 - + Set hostname <strong>%1</strong>. Set hostname <strong>%1</strong>. - + Setting hostname %1. Setting hostname %1. - - + + Internal Error Internal Error - - + + Cannot write hostname to target system Cannot write hostname to target system @@ -2583,9 +2608,9 @@ Output: WelcomeViewStep - + Welcome Welcome - \ No newline at end of file + diff --git a/lang/python.pot b/lang/python.pot index fab6d56ba..2062b9031 100644 --- a/lang/python.pot +++ b/lang/python.pot @@ -2,57 +2,57 @@ # 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" +"POT-Creation-Date: 2018-06-18 07:46-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/umount/main.py:40 msgid "Unmount file systems." -msgstr "Unmount file systems." +msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." -msgstr "Dummy python job." +msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" -msgstr "Dummy python step {}" +msgstr "" #: src/modules/machineid/main.py:35 msgid "Generate machine-id." -msgstr "Generate machine-id." +msgstr "" -#: src/modules/packages/main.py:61 +#: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "Processing packages (%(count)d / %(total)d)" +msgstr "" -#: src/modules/packages/main.py:63 src/modules/packages/main.py:73 +#: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." -msgstr "Install packages." +msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "Installing one package." -msgstr[1] "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" -#: src/modules/packages/main.py:69 +#: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "Removing one package." -msgstr[1] "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" diff --git a/src/modules/dummypythonqt/lang/dummypythonqt.pot b/src/modules/dummypythonqt/lang/dummypythonqt.pot index 1fc28e16d..2cac1d0c0 100644 --- a/src/modules/dummypythonqt/lang/dummypythonqt.pot +++ b/src/modules/dummypythonqt/lang/dummypythonqt.pot @@ -2,41 +2,41 @@ # 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-02-07 18:58+0100\n" +"POT-Creation-Date: 2018-06-18 07:46-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" -msgstr "Click me!" +msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." -msgstr "A new QLabel." +msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" -msgstr "Dummy PythonQt ViewStep" +msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" -msgstr "The Dummy PythonQt Job" +msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" -msgstr "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 "A status message for Dummy PythonQt Job." +msgstr "" From a64de3dbfe74233c66ededaaa501b1e708389cc1 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 10:29:30 -0400 Subject: [PATCH 17/29] [libcalamaresui] Assign the index to found - Previous code assigns the result of the comparison to found, instead of the index, resulting in the wrong configuration map sent to each module. --- src/libcalamaresui/modulesystem/ModuleManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 6d13c9564..9c3345a73 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -218,7 +218,9 @@ ModuleManager::loadModules() if ( moduleName != instanceId ) //means this is a custom instance { - if ( int found = findCustomInstance( customInstances, moduleName, instanceId ) > -1 ) + int found = findCustomInstance( customInstances, moduleName, instanceId ); + + if ( found > -1 ) { configFileName = customInstances[ found ].value( "config" ); } From 58121abf0643c95379b3f16c266c4c9ae10a9423 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 10:44:28 -0400 Subject: [PATCH 18/29] [libcalamaresui] Wasted spaces --- src/libcalamaresui/modulesystem/ModuleManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 9c3345a73..375d15158 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -220,7 +220,7 @@ ModuleManager::loadModules() { int found = findCustomInstance( customInstances, moduleName, instanceId ); - if ( found > -1 ) + if ( found > -1 ) { configFileName = customInstances[ found ].value( "config" ); } From 1a097f8c490d5eb42df0df2abfeaa3401433471a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 18 Jun 2018 10:56:10 -0400 Subject: [PATCH 19/29] Style: run modulesystem through the style guide --- .../modulesystem/CppJobModule.cpp | 7 ++-- src/libcalamaresui/modulesystem/Module.cpp | 25 ++++-------- src/libcalamaresui/modulesystem/Module.h | 10 ++++- .../modulesystem/ModuleManager.cpp | 26 +++++------- .../modulesystem/ProcessJobModule.cpp | 13 ++---- .../modulesystem/PythonJobModule.cpp | 9 ++--- .../modulesystem/PythonJobModule.h | 3 +- .../modulesystem/PythonQtViewModule.cpp | 40 +++++++++---------- .../modulesystem/PythonQtViewModule.h | 3 +- .../modulesystem/ViewModule.cpp | 3 +- 10 files changed, 61 insertions(+), 78 deletions(-) diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp index 9799066e7..3a48e29f2 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.cpp +++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp @@ -26,7 +26,8 @@ #include #include -namespace Calamares { +namespace Calamares +{ Module::Type @@ -55,7 +56,7 @@ CppJobModule::loadSelf() return; } - CppJob *cppJob = pf->create< Calamares::CppJob >(); + CppJob* cppJob = pf->create< Calamares::CppJob >(); if ( !cppJob ) { cDebug() << Q_FUNC_INFO << m_loader->errorString(); @@ -68,7 +69,7 @@ CppJobModule::loadSelf() cppJob->setModuleInstanceKey( instanceKey() ); cppJob->setConfigurationMap( m_configurationMap ); - m_job = Calamares::job_ptr( static_cast< Calamares::Job * >( cppJob ) ); + m_job = Calamares::job_ptr( static_cast< Calamares::Job* >( cppJob ) ); m_loaded = true; cDebug() << "CppJobModule" << instanceKey() << "loading complete."; } diff --git a/src/libcalamaresui/modulesystem/Module.cpp b/src/libcalamaresui/modulesystem/Module.cpp index 9b3be877f..c820b98b3 100644 --- a/src/libcalamaresui/modulesystem/Module.cpp +++ b/src/libcalamaresui/modulesystem/Module.cpp @@ -71,8 +71,7 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor, QString typeString = moduleDescriptor.value( "type" ).toString(); QString intfString = moduleDescriptor.value( "interface" ).toString(); - if ( typeString.isEmpty() || - intfString.isEmpty() ) + if ( typeString.isEmpty() || intfString.isEmpty() ) { cError() << "Bad module descriptor format" << instanceId; return nullptr; @@ -80,9 +79,7 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor, if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) ) { if ( intfString == "qtplugin" ) - { m.reset( new ViewModule() ); - } else if ( intfString == "pythonqt" ) { #ifdef WITH_PYTHONQT @@ -97,13 +94,9 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor, else if ( typeString == "job" ) { if ( intfString == "qtplugin" ) - { m.reset( new CppJobModule() ); - } else if ( intfString == "process" ) - { m.reset( new ProcessJobModule() ); - } else if ( intfString == "python" ) { #ifdef WITH_PYTHON @@ -121,8 +114,8 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor, if ( !m ) { cError() << "Bad module type (" << typeString - << ") or interface string (" << intfString - << ") for module " << instanceId; + << ") or interface string (" << intfString + << ") for module " << instanceId; return nullptr; } @@ -168,8 +161,7 @@ Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Ex { configFilesByPriority.append( QDir( QDir::currentPath() ).absoluteFilePath( - QString( "src/modules/%1/%2" ).arg( m_name ) - .arg( configFileName ) ) ); + QString( "src/modules/%1/%2" ).arg( m_name ).arg( configFileName ) ) ); } configFilesByPriority.append( @@ -201,8 +193,8 @@ 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(); + && m_configurationMap.contains( EMERGENCY ) + && m_configurationMap[ EMERGENCY ].toBool(); return; } else @@ -228,8 +220,7 @@ Module::instanceId() const QString Module::instanceKey() const { - return QString( "%1@%2" ).arg( m_name ) - .arg( m_instanceId ); + return QString( "%1@%2" ).arg( m_name ).arg( m_instanceId ); } @@ -297,9 +288,7 @@ 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 4fd0020f8..18c2e4cbe 100644 --- a/src/libcalamaresui/modulesystem/Module.h +++ b/src/libcalamaresui/modulesystem/Module.h @@ -147,7 +147,10 @@ public: * @brief isLoaded reports on the loaded status of a module. * @return true if the module's loading phase has finished, otherwise false. */ - bool isLoaded() const { return m_loaded; } + bool isLoaded() const + { + return m_loaded; + } /** * @brief loadSelf initialized the module. @@ -164,7 +167,10 @@ public: * 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; } + bool isEmergency() const + { + return m_emergency; + } /** * @brief jobs returns any jobs exposed by this module. diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 375d15158..ed1e52f9f 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -60,10 +60,8 @@ ModuleManager::ModuleManager( const QStringList& paths, QObject* parent ) ModuleManager::~ModuleManager() { // The map is populated with Module::fromDescriptor(), which allocates on the heap. - for( auto moduleptr : m_loadedModulesByInstanceKey ) - { + for ( auto moduleptr : m_loadedModulesByInstanceKey ) delete moduleptr; - } } @@ -119,14 +117,12 @@ ModuleManager::doInit() else { cWarning() << "Cannot cd into module directory " - << path << "/" << subdir; + << path << "/" << subdir; } } } else - { cDebug() << "ModuleManager bad search path" << path; - } } // At this point m_availableModules is filled with whatever was found in the // search paths. @@ -182,10 +178,10 @@ ModuleManager::loadModules() { QStringList failedModules; Settings::InstanceDescriptionList customInstances = - Settings::instance()->customModuleInstances(); + Settings::instance()->customModuleInstances(); const auto modulesSequence = Settings::instance()->modulesSequence(); - for ( const auto &modulePhase : modulesSequence ) + for ( const auto& modulePhase : modulesSequence ) { ModuleAction currentAction = modulePhase.first; @@ -197,7 +193,7 @@ ModuleManager::loadModules() QString instanceId; QString configFileName; if ( moduleEntrySplit.length() < 1 || - moduleEntrySplit.length() > 2 ) + moduleEntrySplit.length() > 2 ) { cError() << "Wrong module entry format for module" << moduleEntry; failedModules.append( moduleEntry ); @@ -208,10 +204,10 @@ ModuleManager::loadModules() configFileName = QString( "%1.conf" ).arg( moduleName ); if ( !m_availableDescriptorsByModuleName.contains( moduleName ) || - m_availableDescriptorsByModuleName.value( moduleName ).isEmpty() ) + m_availableDescriptorsByModuleName.value( moduleName ).isEmpty() ) { cError() << "Module" << moduleName << "not found in module search paths." - << Logger::DebugList( m_paths ); + << Logger::DebugList( m_paths ); failedModules.append( moduleName ); continue; } @@ -221,9 +217,7 @@ ModuleManager::loadModules() int found = findCustomInstance( customInstances, moduleName, instanceId ); if ( found > -1 ) - { 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."; @@ -254,9 +248,7 @@ ModuleManager::loadModules() } if ( thisModule && thisModule->isLoaded() ) - { cDebug() << "Module" << instanceKey << "already loaded."; - } else { thisModule = @@ -318,10 +310,10 @@ ModuleManager::checkDependencies() forever { for ( auto it = m_availableDescriptorsByModuleName.begin(); - it != m_availableDescriptorsByModuleName.end(); ++it ) + it != m_availableDescriptorsByModuleName.end(); ++it ) { foreach ( const QString& depName, - (*it).value( "requiredModules" ).toStringList() ) + ( *it ).value( "requiredModules" ).toStringList() ) { if ( !m_availableDescriptorsByModuleName.contains( depName ) ) { diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp index d8e171977..9037d85a6 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp @@ -22,7 +22,8 @@ #include -namespace Calamares { +namespace Calamares +{ Module::Type @@ -68,23 +69,17 @@ ProcessJobModule::initFrom( const QVariantMap& moduleDescriptor ) m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "command" ).toString().isEmpty() ) - { m_command = moduleDescriptor.value( "command" ).toString(); - } m_secondsTimeout = 30; if ( moduleDescriptor.contains( "timeout" ) && - !moduleDescriptor.value( "timeout" ).isNull() ) - { + !moduleDescriptor.value( "timeout" ).isNull() ) m_secondsTimeout = moduleDescriptor.value( "timeout" ).toInt(); - } m_runInChroot = false; if ( moduleDescriptor.contains( "chroot" )&& - !moduleDescriptor.value( "chroot" ).isNull() ) - { + !moduleDescriptor.value( "chroot" ).isNull() ) m_runInChroot = moduleDescriptor.value( "chroot" ).toBool(); - } } diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.cpp b/src/libcalamaresui/modulesystem/PythonJobModule.cpp index 586eb6e27..7099a3f72 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonJobModule.cpp @@ -23,7 +23,8 @@ #include -namespace Calamares { +namespace Calamares +{ Module::Type @@ -46,9 +47,7 @@ PythonJobModule::loadSelf() if ( m_loaded ) return; - m_job = Calamares::job_ptr( new PythonJob( m_scriptFileName, - m_workingPath, - m_configurationMap ) ); + m_job = Calamares::job_ptr( new PythonJob( m_scriptFileName, m_workingPath, m_configurationMap ) ); m_loaded = true; } @@ -68,9 +67,7 @@ PythonJobModule::initFrom( const QVariantMap& moduleDescriptor ) m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) - { m_scriptFileName = moduleDescriptor.value( "script" ).toString(); - } } diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.h b/src/libcalamaresui/modulesystem/PythonJobModule.h index 78678bcf8..38b10be83 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.h +++ b/src/libcalamaresui/modulesystem/PythonJobModule.h @@ -23,7 +23,8 @@ #include "UiDllMacro.h" -namespace Calamares { +namespace Calamares +{ class UIDLLEXPORT PythonJobModule : public Module { diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp index b667b6a81..9d0aa95e2 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp @@ -40,7 +40,8 @@ static QPointer< GlobalStorage > s_gs = nullptr; static QPointer< Utils > s_utils = nullptr; -namespace Calamares { +namespace Calamares +{ Module::Type PythonQtViewModule::type() const @@ -98,20 +99,21 @@ PythonQtViewModule::loadSelf() cala.addObject( "utils", s_utils ); // Append configuration object, in module PythonQt.calamares - cala.addVariable("configuration", m_configurationMap); + cala.addVariable( "configuration", m_configurationMap ); // Basic stdout/stderr handling QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut, - []( const QString& message ) - { - cDebug() << "PythonQt OUT>" << message; - } ); + []( const QString& message ) + { + cDebug() << "PythonQt OUT>" << message; + } + ); QObject::connect( PythonQt::self(), &PythonQt::pythonStdErr, - []( const QString& message ) - { - cDebug() << "PythonQt ERR>" << message; - } ); - + []( const QString& message ) + { + cDebug() << "PythonQt ERR>" << message; + } + ); } QDir workingDir( m_workingPath ); @@ -137,8 +139,8 @@ PythonQtViewModule::loadSelf() // Construct empty Python module with the given name PythonQtObjectPtr cxt = - PythonQt::self()-> - createModuleFromScript( name() ); + PythonQt::self()-> + createModuleFromScript( name() ); if ( cxt.isNull() ) { cDebug() << "Cannot load PythonQt context from file" @@ -149,11 +151,11 @@ PythonQtViewModule::loadSelf() } static const QLatin1Literal calamares_module_annotation( - "_calamares_module_typename = ''\n" - "def calamares_module(viewmodule_type):\n" - " global _calamares_module_typename\n" - " _calamares_module_typename = viewmodule_type.__name__\n" - " return viewmodule_type\n"); + "_calamares_module_typename = ''\n" + "def calamares_module(viewmodule_type):\n" + " global _calamares_module_typename\n" + " _calamares_module_typename = viewmodule_type.__name__\n" + " return viewmodule_type\n" ); // Load in the decorator PythonQt::self()->evalScript( cxt, calamares_module_annotation ); @@ -191,9 +193,7 @@ PythonQtViewModule::initFrom( const QVariantMap& moduleDescriptor ) m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) - { m_scriptFileName = moduleDescriptor.value( "script" ).toString(); - } } PythonQtViewModule::PythonQtViewModule() diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.h b/src/libcalamaresui/modulesystem/PythonQtViewModule.h index 327e24269..cc6899599 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.h +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.h @@ -22,7 +22,8 @@ #include "UiDllMacro.h" #include "Module.h" -namespace Calamares { +namespace Calamares +{ class ViewStep; diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp index 492d58fda..473ec6457 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.cpp +++ b/src/libcalamaresui/modulesystem/ViewModule.cpp @@ -27,7 +27,8 @@ #include #include -namespace Calamares { +namespace Calamares +{ Module::Type From 863d00f40c00fa0b551fd96f6a5302213c2a76bc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 Jun 2018 08:42:25 -0400 Subject: [PATCH 21/29] [localecfg] Document purpose of this module --- src/modules/localecfg/main.py | 1 + src/modules/localecfg/module.desc | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index d44d7da2b..55c704fae 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -7,6 +7,7 @@ # Copyright 2015, Philip Müller # Copyright 2016, Teo Mrnjavac # Copyright 2018, AlmAck +# 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/localecfg/module.desc b/src/modules/localecfg/module.desc index 89baab7ad..815480562 100644 --- a/src/modules/localecfg/module.desc +++ b/src/modules/localecfg/module.desc @@ -1,3 +1,6 @@ +# Enable the configured locales (those set by the user on the +# user page) in /etc/locale.gen, if they are available in the +# target system. --- type: "job" name: "localecfg" From 7498629b5f71e189d63468ac6e49ff35080f2ed2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 Jun 2018 08:46:50 -0400 Subject: [PATCH 22/29] [localecfg] Move all path-setting to one spot - Make the way the paths are constructed consistent - Name the paths more consistently --- src/modules/localecfg/main.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index 55c704fae..a192fa902 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -48,23 +48,27 @@ def run(): } install_path = libcalamares.globalstorage.value("rootMountPoint") + target_locale_gen = "{!s}/etc/locale.gen".format(install_path) + target_locale_gen_bak = target_locale_gen + ".bak" + target_locale_conf_path = "{!s}/etc/locale.conf".format(install_path) + target_etc_default_path = "{!s}/etc/default".format(install_path) # restore backup if available if os.path.exists('/etc/locale.gen.bak'): - shutil.copy2("{!s}/etc/locale.gen.bak".format(install_path), - "{!s}/etc/locale.gen".format(install_path)) + shutil.copy2(target_locale_gen_bak, + target_locale_gen) # run locale-gen if detected if os.path.exists('/etc/locale.gen'): text = [] - with open("{!s}/etc/locale.gen".format(install_path), "r") as gen: + with open(target_locale_gen, "r") as gen: text = gen.readlines() # we want unique values, so locale_values should have 1 or 2 items locale_values = set(locale_conf.values()) - with open("{!s}/etc/locale.gen".format(install_path), "w") as gen: + with open(target_locale_gen, "w") as gen: for line in text: # always enable en_US if line.startswith("#" + en_us_locale): @@ -82,15 +86,13 @@ def run(): print('locale.gen done') # write /etc/locale.conf - locale_conf_path = os.path.join(install_path, "etc/locale.conf") - with open(locale_conf_path, "w") as lcf: + with open(target_locale_conf_path, "w") as lcf: for k, v in locale_conf.items(): lcf.write("{!s}={!s}\n".format(k, v)) # write /etc/default/locale if /etc/default exists and is a dir - etc_default_path = os.path.join(install_path, "etc/default") - if os.path.isdir(etc_default_path): - with open(os.path.join(etc_default_path, "locale"), "w") as edl: + if os.path.isdir(target_etc_default_path): + with open(os.path.join(target_etc_default_path, "locale"), "w") as edl: for k, v in locale_conf.items(): edl.write("{!s}={!s}\n".format(k, v)) From efc977f7b437d11011de640659b42e4bb78e9708 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 Jun 2018 08:56:37 -0400 Subject: [PATCH 23/29] [localecfg] Fix mismatch between filenames Testing for existence of a file in the live system, and then copying it in the target system, is not a recipe for success. - Fix the restore-from-backup part. - Document that your live and target system must both have /etc/locale.gen if you want this to work at all. --- src/modules/localecfg/main.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index a192fa902..4b12b9311 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -54,11 +54,12 @@ def run(): target_etc_default_path = "{!s}/etc/default".format(install_path) # restore backup if available - if os.path.exists('/etc/locale.gen.bak'): - shutil.copy2(target_locale_gen_bak, - target_locale_gen) + if os.path.exists(target_locale_gen_bak): + shutil.copy2(target_locale_gen_bak, target_locale_gen) - # run locale-gen if detected + # run locale-gen if detected; this *will* cause an exception + # if the live system has locale.gen, but the target does not: + # in that case, fix your installation filesystem. if os.path.exists('/etc/locale.gen'): text = [] From b283ad69d567bad4d112120e6bcb71572d9f7213 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 Jun 2018 17:58:26 +0200 Subject: [PATCH 24/29] [libcalamares] Complain if key isn't set - Previous check would also fail when the setting is false, not just when the key is missing. --- src/libcalamares/Settings.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 80f6836bb..6450332f0 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -29,13 +29,19 @@ #include +static bool +hasValue( const YAML::Node& v ) +{ + return !( ( v.Type() == YAML::NodeType::Null ) || ( v.Type() == YAML::NodeType::Undefined ) ); +} /** 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 >() ); + auto v = config[ key ]; + if ( hasValue(v) ) + return QString::fromStdString( v.as< std::string >() ); else { cWarning() << "Required settings.conf key" << key << "is missing."; @@ -47,8 +53,9 @@ requireString( const YAML::Node& config, const char* key ) static bool requireBool( const YAML::Node& config, const char* key, bool d ) { - if ( config[ key ] ) - return config[ key ].as< bool >(); + auto v = config[ key ]; + if ( hasValue(v) ) + return v.as< bool >(); else { cWarning() << "Required settings.conf key" << key << "is missing."; From ec09272b8199b79d89ad96461bbd4c43ac762f27 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 Jun 2018 18:04:38 +0200 Subject: [PATCH 25/29] [libcalamares] Fix inverted logic Reported by bshah. --- src/libcalamares/Settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 6450332f0..ac4cea896 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -182,7 +182,7 @@ Settings::Settings( const QString& settingsFilePath, m_brandingComponentName = requireString( config, "branding" ); m_promptInstall = requireBool( config, "prompt-install", false ); - m_doChroot = requireBool( config, "dont-chroot", true ); + m_doChroot = !requireBool( config, "dont-chroot", false ); } catch ( YAML::Exception& e ) { From 413ee81eade994a99ab3894c4bafaa4b146df931 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 Jun 2018 07:13:36 -0400 Subject: [PATCH 26/29] [localecfg] Simplify handling of en_US - By adding en_US to the set of locales-to-enable, we can drop the special-case code for it. --- src/modules/localecfg/main.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index 4b12b9311..413026c06 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -68,14 +68,10 @@ def run(): # we want unique values, so locale_values should have 1 or 2 items locale_values = set(locale_conf.values()) + locale_values.add(en_us_locale) # Always enable en_US as well with open(target_locale_gen, "w") as gen: for line in text: - # always enable en_US - if line.startswith("#" + en_us_locale): - # uncomment line - line = line[1:].lstrip() - for locale_value in locale_values: if line.startswith("#" + locale_value): # uncomment line From 85516535754bbbafb6d53bebf3e73c5e65e4e160 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 Jun 2018 08:35:18 -0400 Subject: [PATCH 27/29] [localecfg] Re-write the locale.gen file better - Improved debug-logging - Fix the actual problem of listing locales more than once, by listing them all, uniqified, at the end, with an explanitory comment in the generated file. - Be more accepting of what constitutes a locale-line; this allows spaces before and after the `#` comment sign, but because we're uniquifying, this doesn't cause duplicates. - Because we write the enabled locales at the end, the full file comment-header is retained un-mangled (instead of accidentally enabling a locale mentioned as an example there). --- src/modules/localecfg/main.py | 100 +++++++++++++++++++++++++++------- 1 file changed, 79 insertions(+), 21 deletions(-) diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index 413026c06..bf41e6317 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -23,14 +23,85 @@ # along with Calamares. If not, see . import os +import re import shutil -import libcalamares +RE_IS_COMMENT = re.compile("^ *#") +def is_comment(line): + """ + Does the @p line look like a comment? Whitespace, followed by a # + is a comment-only line. + """ + return bool(RE_IS_COMMENT.match(line)) + +RE_REST_OF_LINE = re.compile("\\s.*$") +def extract_locale(line): + """ + Extracts a locale from the @p line, and returns a pair of + (extracted-locale, uncommented line). The locale is the + first word of the line after uncommenting (in the human- + readable text explanation at the top of most /etc/locale.gen + files, the locales may be bogus -- either "" or e.g. "Configuration") + """ + # Remove leading spaces and comment signs + line = RE_IS_COMMENT.sub("", line) + uncommented = line.strip() + # Drop all but first field + locale = RE_REST_OF_LINE.sub("", uncommented) + return locale, uncommented + + +def rewrite_locale_gen(srcfilename, destfilename, locale_conf): + """ + Copies a locale.gen file from @p srcfilename to @p destfilename + (this may be the same name), enabling those locales that can + be found in the map @p locale_conf. Also always enables en_US.UTF-8. + """ + en_us_locale = 'en_US.UTF-8' + + # Get entire source-file contents + text = [] + with open(srcfilename, "r") as gen: + text = gen.readlines() + + # we want unique values, so locale_values should have 1 or 2 items + locale_values = set(locale_conf.values()) + locale_values.add(en_us_locale) # Always enable en_US as well + + enabled_locales = {} + seen_locales = set() + + # Write source out again, enabling some + with open(destfilename, "w") as gen: + for line in text: + c = is_comment(line) + locale, uncommented = extract_locale(line) + + # Non-comment lines are preserved, and comment lines + # may be enabled if they match a desired locale + if not c: + seen_locales.add(locale) + else: + for locale_value in locale_values: + if locale.startswith(locale_value): + enabled_locales[locale] = uncommented + gen.write(line) + + gen.write("\n###\n#\n# Locales enabled by Calamares\n") + for locale, line in enabled_locales.items(): + if locale not in seen_locales: + gen.write(line + "\n") + seen_locales.add(locale) + + for locale in locale_values: + if locale not in seen_locales: + gen.write("# Missing: %s\n" % locale) def run(): """ Create locale """ - en_us_locale = 'en_US.UTF-8' + import libcalamares + locale_conf = libcalamares.globalstorage.value("localeConf") if not locale_conf: @@ -56,41 +127,28 @@ def run(): # restore backup if available if os.path.exists(target_locale_gen_bak): shutil.copy2(target_locale_gen_bak, target_locale_gen) + libcalamares.utils.debug("Restored backup {!s} -> {!s}" + .format(target_locale_gen_bak).format(target_locale_gen)) # run locale-gen if detected; this *will* cause an exception # if the live system has locale.gen, but the target does not: # in that case, fix your installation filesystem. if os.path.exists('/etc/locale.gen'): - text = [] - - with open(target_locale_gen, "r") as gen: - text = gen.readlines() - - # we want unique values, so locale_values should have 1 or 2 items - locale_values = set(locale_conf.values()) - locale_values.add(en_us_locale) # Always enable en_US as well - - with open(target_locale_gen, "w") as gen: - for line in text: - for locale_value in locale_values: - if line.startswith("#" + locale_value): - # uncomment line - line = line[1:].lstrip() - - gen.write(line) - + rewrite_locale_gen(target_locale_gen, target_locale_gen, locale_conf) libcalamares.utils.target_env_call(['locale-gen']) - print('locale.gen done') + libcalamares.utils.debug('{!s} done'.format(target_locale_gen)) # write /etc/locale.conf with open(target_locale_conf_path, "w") as lcf: for k, v in locale_conf.items(): lcf.write("{!s}={!s}\n".format(k, v)) + libcalamares.utils.debug('{!s} done'.format(target_locale_conf_path)) # write /etc/default/locale if /etc/default exists and is a dir if os.path.isdir(target_etc_default_path): with open(os.path.join(target_etc_default_path, "locale"), "w") as edl: for k, v in locale_conf.items(): edl.write("{!s}={!s}\n".format(k, v)) + libcalamares.utils.debug('{!s} done'.format(target_etc_default_path)) return None From 25f249180b40f95958601f5d2431a365bd6ce2a8 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 Jun 2018 09:11:23 -0400 Subject: [PATCH 28/29] [localecfg] Be slightly more conservative interpreting comments - A valid line (as explained in the comments at the top of the locale.gen file) is (two fields), so lines with more than two fields can't be valid locale- listing lines. For them, pretend they name locale "", which won't be matched. --- src/modules/localecfg/main.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index bf41e6317..62a00b738 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -34,6 +34,7 @@ def is_comment(line): """ return bool(RE_IS_COMMENT.match(line)) +RE_TRAILING_COMMENT = re.compile("#.*$") RE_REST_OF_LINE = re.compile("\\s.*$") def extract_locale(line): """ @@ -46,9 +47,14 @@ def extract_locale(line): # Remove leading spaces and comment signs line = RE_IS_COMMENT.sub("", line) uncommented = line.strip() - # Drop all but first field - locale = RE_REST_OF_LINE.sub("", uncommented) - return locale, uncommented + fields = RE_TRAILING_COMMENT.sub("", uncommented).strip().split() + if len(fields) != 2: + # Not exactly two fields, can't be a proper locale line + return "", uncommented + else: + # Drop all but first field + locale = RE_REST_OF_LINE.sub("", uncommented) + return locale, uncommented def rewrite_locale_gen(srcfilename, destfilename, locale_conf): From d59a44be44831a799c0fc4ee388c9fd4fee51bac Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 Jun 2018 15:59:23 +0200 Subject: [PATCH 29/29] [libcalamares] Asking for type of undefined node throws - Use YAML-CPP API for finding out if a node has a value at all. - Asking for Type() of an undefined or NULL node throws an exception, so the existing code didn't **actually** catch cases where a required setting wasn't set at all. --- src/libcalamares/Settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index ac4cea896..1fdfc6daa 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -32,7 +32,7 @@ static bool hasValue( const YAML::Node& v ) { - return !( ( v.Type() == YAML::NodeType::Null ) || ( v.Type() == YAML::NodeType::Undefined ) ); + return v.IsDefined() && !v.IsNull(); } /** Helper function to grab a QString out of the config, and to warn if not present. */