summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2017-10-28 09:07:39 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2017-12-01 21:55:38 -0500
commit8f6fe713abba9f6a3107bc8898074c51c2ffefda (patch)
treefa67ce5cef10184c2565aabe0fc7190e8d3616bc
parent4faab230b7a670c694c8d083a8d6df57105e2b0b (diff)
debug
-rw-r--r--src/libcalamares/PacstrapCppJob.cpp262
-rw-r--r--src/libcalamares/PacstrapCppJob.h76
-rw-r--r--src/modules/pacstrap-base/pacstrap-base.cpp47
-rw-r--r--src/modules/pacstrap-base/pacstrap-base.h10
-rw-r--r--src/modules/pacstrap-gui/pacstrap-gui.conf2
-rw-r--r--src/modules/pacstrap-gui/pacstrap-gui.cpp44
-rw-r--r--src/modules/pacstrap-gui/pacstrap-gui.h10
7 files changed, 270 insertions, 181 deletions
diff --git a/src/libcalamares/PacstrapCppJob.cpp b/src/libcalamares/PacstrapCppJob.cpp
index 51f854e5d..a24817497 100644
--- a/src/libcalamares/PacstrapCppJob.cpp
+++ b/src/libcalamares/PacstrapCppJob.cpp
@@ -24,28 +24,53 @@
#include <PacstrapCppJob.h>
-/* PacstrapCppJob private class variables */
+/* PacstrapCppJob public class constants */
+
+const QString PacstrapCppJob::DESKTOP_PACKAGES_KEY = "default-desktop" ;
+
+
+/* PacstrapCppJob protected class constants */
+
+const QString PacstrapCppJob::MOUNTPOINT = "/tmp/pacstrap" ;
+const char* PacstrapCppJob::BASE_JOB_NAME = "Pacstrap Base C++ Job" ;
+const char* PacstrapCppJob::GUI_JOB_NAME = "Pacstrap Desktop C++ Job" ;
+const char* PacstrapCppJob::BASE_STATUS_MSG = "Installing root filesystem" ;
+const char* PacstrapCppJob::GUI_STATUS_MSG = "Installing graphical desktop environment" ;
+const qreal PacstrapCppJob::BASE_JOB_WEIGHT = 23.0 ; // progress-bar job weight (1.0 normal)
+const qreal PacstrapCppJob::GUI_JOB_WEIGHT = 69.0 ; // progress-bar job weight (1.0 normal)
+const QString PacstrapCppJob::BASE_PACKAGES_KEY = "base" ;
+const QString PacstrapCppJob::BOOTLODER_PACKAGES_KEY = "bootloader" ;
+const QString PacstrapCppJob::KERNEL_PACKAGES_KEY = "kernel" ;
+const QString PacstrapCppJob::APPLICATIONS_PACKAGES_KEY = "applications" ;
+const QString PacstrapCppJob::MULTIMEDIA_PACKAGES_KEY = "multimedia" ;
+const QString PacstrapCppJob::NETWORK_PACKAGES_KEY = "network" ;
+const QString PacstrapCppJob::THEMES_PACKAGES_KEY = "themes" ;
+const QString PacstrapCppJob::UTILITIES_PACKAGES_KEY = "utilities" ;
+const QString PacstrapCppJob::XSERVER_PACKAGES_KEY = "x-server" ;
+const QString PacstrapCppJob::MATE_PACKAGES_KEY = "mate" ;
+const QString PacstrapCppJob::LXDE_PACKAGES_KEY = "lxde" ;
+const QString PacstrapCppJob::PACSTRAP_FMT = "pacstrap -c -C %1 %2 %3" ;
+const QString PacstrapCppJob::PACSTRAP_ERROR_MSG = "Failed to install packages in chroot." ;
+
+
+/* PacstrapCppJob private class constants */
-const QString PacstrapCppJob::MOUNTPOINT = "/tmp/pacstrap" ;
const QDir PacstrapCppJob::PACKAGES_CACHE_DIR = QDir(MOUNTPOINT + "/var/cache/pacman/pkg") ;
const QDir PacstrapCppJob::PACKAGES_METADATA_DIR = QDir(MOUNTPOINT + "/var/lib/pacman/local") ;
-const char* PacstrapCppJob::BASE_JOB_NAME = "Pacstrap Base C++ Job" ;
-const char* PacstrapCppJob::GUI_JOB_NAME = "Pacstrap Desktop C++ Job" ;
-const char* PacstrapCppJob::BASE_STATUS_MSG = "Installing root filesystem" ;
-const char* PacstrapCppJob::GUI_STATUS_MSG = "Installing graphical desktop environment" ;
-const qreal PacstrapCppJob::BASE_JOB_WEIGHT = 23.0 ; // progress-bar job weight (1.0 normal)
-const qreal PacstrapCppJob::GUI_JOB_WEIGHT = 69.0 ; // progress-bar job weight (1.0 normal)
const QString PacstrapCppJob::ONLINE_CONF_FILENAME = "/etc/pacman-online.conf" ;
const QString PacstrapCppJob::OFFLINE_CONF_FILENAME = "/etc/pacman-offline.conf" ;
const QString PacstrapCppJob::IS_ONLINE_KEY = "hasInternet" ;
-const QString PacstrapCppJob::TARGET_DEVICE_KEY = "target-device" ;
+const QString PacstrapCppJob::PARTITIONS_KEY = "partitions" ;
+const QString PacstrapCppJob::DEVICE_KEY = "device" ;
+const QString PacstrapCppJob::FS_KEY = "fs" ;
+const QString PacstrapCppJob::MOUNTPOINT_KEY = "mountPoint" ;
+const QString PacstrapCppJob::UUID_KEY = "uuid" ;
const QString PacstrapCppJob::SYSTEM_EXEC_FMT = "/bin/sh -c \"%1\"" ;
+// const QString PacstrapCppJob::KEYRING_CMD = "pacman -Sy --noconfirm parabola-keyring" ;
// const QString PacstrapCppJob::KEYRING_CMD = "pacman -Sy --noconfirm parabola-keyring && \
// pacman-key --populate parabola && \
// pacman-key --refresh-keys " ;
-// const QString PacstrapCppJob::KEYRING_CMD = "pacman -Sy --noconfirm parabola-keyring" ;
-const QString PacstrapCppJob::MKDIR_FMT = "mkdir %1 2> /dev/null" ;
-const QString PacstrapCppJob::MOUNT_FMT = "mount %1 %2" ;
+const QString PacstrapCppJob::MOUNT_FMT = "mkdir %2 2> /dev/null || true && mount %1 %2" ;
const QString PacstrapCppJob::CHROOT_PREP_FMT = "mkdir -m 0755 -p {%1,%2}" ;
const QString PacstrapCppJob::PACKAGES_SYNC_FMT = "pacman --print --config %1 --root %2 -Sy" ;
const QString PacstrapCppJob::LIST_PACKAGES_FMT = "pacman --print --config %1 --root %2 -S %3" ;
@@ -53,6 +78,11 @@ const QString PacstrapCppJob::UMOUNT_FMT = "umount %1" ;
const QString PacstrapCppJob::CONFIG_ERROR_MSG = "Invalid configuration map." ;
const QString PacstrapCppJob::TARGET_ERROR_MSG = "Target device for root filesystem is unspecified." ;
const QString PacstrapCppJob::CONFFILE_ERROR_MSG = "Pacman configuration not found: '%1'." ;
+// const QString PacstrapCppJob::KEYRING_ERROR_MSG = "Failed to update the pacman keyring." ;
+const QString PacstrapCppJob::MOUNT_ERROR_MSG = "Failed to mount the pacstrap chroot." ;
+const QString PacstrapCppJob::CHROOT_PREP_ERROR_MSG = "Failed to prepare the pacstrap chroot." ;
+const QString PacstrapCppJob::PACMAN_SYNC_ERROR_MSG = "Failed to syncronize packages in the pacstrap chroot." ;
+const QString PacstrapCppJob::UMOUNT_ERROR_MSG = "Failed to unmount the pacstrap chroot." ;
/* PacstrapCppJob public constructors/destructors */
@@ -66,16 +96,15 @@ printf("PacstrapCppJob::PacstrapCppJob() '%s'\n" , jobName.toStdString().c_str()
this->globalStorage = Calamares::JobQueue::instance()->globalStorage() ;
this->guiTimerId = startTimer(1000) ;
- this->confFile = QString("") ; // deferred to exec()
- this->packages = QString("") ; // deferred to loadPackageList()
- this->nPackages = 0 ; // deferred to setNPackages()
+// this->guiTimerId = -1 ; // deferred to exec()
+ this->targetDevice = QString("") ; // deferred to exec()->runJob()
+ this->confFile = QString("") ; // deferred to exec()->runJob()
+ this->packages = QString("") ; // deferred to exec()->runJob()
+ this->nPackages = 0 ; // deferred to exec()->runJob()
}
-PacstrapCppJob::~PacstrapCppJob() {
-printf("PacstrapCppJob::~PacstrapCppJob() '%s'\n" , jobName.toStdString().c_str()) ;
-
- killTimer(this->guiTimerId) ;
-}
+PacstrapCppJob::~PacstrapCppJob() { killTimer(this->guiTimerId) ; }
+// PacstrapCppJob::~PacstrapCppJob() {}
/* PacstrapCppJob public getters/setters */
@@ -93,41 +122,18 @@ QString PacstrapCppJob::prettyStatusMessage() const { return thi
Calamares::JobResult PacstrapCppJob::exec()
{
- setTargetDevice() ; loadPackageList() ;
-
- bool has_internet = this->globalStorage->value(IS_ONLINE_KEY ).toBool() ;
- QString target_device = this->globalStorage->value(TARGET_DEVICE_KEY).toString() ;
- this->confFile = (has_internet) ? ONLINE_CONF_FILENAME : OFFLINE_CONF_FILENAME ;
+// #include <QTimer>
+// QTimer* guiTimer = new QTimer() ;
+// connect(guiTimer , SIGNAL(timeout()) , this , SLOT(updateProgress())) ;
+// guiTimer->start((std::chrono::milliseconds)1000) ;
- if (this->localStorage.empty() ) return JobErrorRetval(CONFIG_ERROR_MSG) ;
- if (target_device.isEmpty() ) return JobErrorRetval(TARGET_ERROR_MSG) ;
- if (!QFile(this->confFile).exists()) return JobErrorRetval(CONFFILE_ERROR_MSG.arg(this->confFile)) ;
+// this->guiTimerId = startTimer(1000) ;
+ Calamares::JobResult retval = runJob() ;
-// QString keyring_cmd = KEYRING_CMD ;
- QString mkdir_cmd = MKDIR_FMT .arg(MOUNTPOINT) ;
- QString mount_cmd = MOUNT_FMT .arg(target_device , MOUNTPOINT) ;
- QString chroot_init_cmd = CHROOT_PREP_FMT .arg(PACKAGES_CACHE_DIR .absolutePath() ,
- PACKAGES_METADATA_DIR.absolutePath() ) ;
- QString pacman_sync_cmd = PACKAGES_SYNC_FMT.arg(this->confFile , MOUNTPOINT) ;
- QString list_packages_cmd = LIST_PACKAGES_FMT.arg(this->confFile , MOUNTPOINT , this->packages) ;
- QString umount_cmd = UMOUNT_FMT .arg(target_device) ;
-
-// ExecWithStatus(keyring_cmd) ;
- ExecWithStatus(mkdir_cmd ) ;
- ExecWithStatus(mount_cmd ) ;
- ExecWithStatus(chroot_init_cmd) ;
- ExecWithStatus(pacman_sync_cmd) ;
- if (!this->packages.isEmpty() && setNPackages(list_packages_cmd) > 0)
- {
-// return Calamares::JobResult::error("just cause") ;
-
- QString exec_error_msg = chrootExec() ;
- if (!exec_error_msg.isEmpty()) return JobErrorRetval(exec_error_msg) ;
- }
- else emit progress(this->jobWeight) ;
- ExecWithStatus(umount_cmd) ;
+// killTimer(this->guiTimerId) ;
+// guiTimer->stop() ;
- return JobSuccessRetval() ;
+ return retval ;
}
@@ -151,79 +157,73 @@ QString PacstrapCppJob::QListToString(const QVariantList& package_list)
return result.join(' ') ;
}
-qint16 PacstrapCppJob::NPackagesInstalled()
+QString PacstrapCppJob::FindTargetDevice(const QVariantList& partitions)
{
-// QProcess::execute(QString("/bin/sh -c \"ls %1 | wc\"").arg(PACKAGES_CACHE_DIR .absolutePath())) ;
-// QProcess::execute(QString("/bin/sh -c \"ls %1 | wc\"").arg(PACKAGES_METADATA_DIR.absolutePath())) ;
-// int n1 = PACKAGES_CACHE_DIR .entryList(QDir::Files | QDir::NoDotAndDotDot).count() ;
-// QString s1 = PACKAGES_CACHE_DIR .entryList(QDir::Files | QDir::NoDotAndDotDot).join(",") ;
-// int n2 = PACKAGES_METADATA_DIR.entryList(QDir::Dirs | QDir::NoDotAndDotDot).count() ;
-// QString s2 = PACKAGES_METADATA_DIR.entryList(QDir::Dirs | QDir::NoDotAndDotDot).join(",") ;
-// printf("[PACSTRAPCPP]: nPackagesInstalled() PACKAGES_CACHE_DIR=%d\n" , n1) ;
-// printf("[PACSTRAPCPP]: nPackagesInstalled() PACKAGES_CACHE_DIR=%s\n" , s1) ;
-// printf("[PACSTRAPCPP]: nPackagesInstalled() PACKAGES_METADATA_DIR=%d\n" , n2) ;
-// printf("[PACSTRAPCPP]: nPackagesInstalled() PACKAGES_METADATA_DIR=%s\n" , s2) ;
-// printf("[PACSTRAPCPP]: nPackagesInstalled() ret=%d\n" , ((n1 + n2) / 2)) ;
+ QString target_device = QString("") ;
- return (PACKAGES_CACHE_DIR .entryList(QDir::Files | QDir::NoDotAndDotDot).count() +
- PACKAGES_METADATA_DIR.entryList(QDir::Dirs | QDir::NoDotAndDotDot).count() ) / 2 ;
+ // locate target device for root filesystem
+ foreach (const QVariant& partition , partitions)
+ {
+QStringList result; for ( auto it = partition.toMap().constBegin(); it != partition.toMap().constEnd(); ++it ) result.append( it.key() + '=' + it.value().toString() );
+printf("[PACSTRAPCPP]: partition=[%s]\n" , result.join(',').toStdString().c_str()) ;
+
+ QVariantMap partition_map = partition.toMap() ;
+ QString device = partition_map.value(DEVICE_KEY ).toString() ;
+ QString fs = partition_map.value(FS_KEY ).toString() ;
+ QString mountpoint = partition_map.value(MOUNTPOINT_KEY).toString() ;
+ QString uuid = partition_map.value(UUID_KEY ).toString() ;
+
+ if (mountpoint == "/") target_device = device ;
+
+if (mountpoint == "/") printf("[PACSTRAPCPP]: target_device=%s\n" , device.toStdString().c_str()) ;
+ }
+
+ return target_device ;
}
-int PacstrapCppJob::ExecWithStatus(QString command_line)
+unsigned int PacstrapCppJob::NPackagesInstalled()
{
- return QProcess::execute(QString(SYSTEM_EXEC_FMT).arg(command_line)) ;
+ return (PACKAGES_CACHE_DIR .entryList(QDir::Files | QDir::NoDotAndDotDot).count() +
+ PACKAGES_METADATA_DIR.entryList(QDir::Dirs | QDir::NoDotAndDotDot).count() ) / 2 ;
}
-QStringList PacstrapCppJob::ExecWithOutput(QString command_line)
+QStringList PacstrapCppJob::Exec(QString command_line)
{
- QProcess proc ; proc.start(command_line) ; proc.waitForFinished(-1) ;
+ QProcess proc ;
+ proc.start(QString(SYSTEM_EXEC_FMT).arg(command_line)) ; proc.waitForFinished(-1) ;
+
+ int status = proc.exitStatus() ;
QString stdout = proc.readAllStandardOutput() ;
QString stderr = proc.readAllStandardError() ;
-// cDebug() << "[PACSTRAPCPP_DEBUG]: PacstrapCppJob::ExecWithOutput() stdout=" << stdout ;
-// cDebug() << "[PACSTRAPCPP_DEBUG]: PacstrapCppJob::ExecWithOutput() stderr=" << stderr ;
+// printf("[PACSTRAPCPP_DEBUG]: PacstrapCppJob::ExecWithOutput() status=%d\n" , status) ;
+// printf("[PACSTRAPCPP_DEBUG]: PacstrapCppJob::ExecWithOutput() stdout=%s\n" , stdout) ;
+// printf("[PACSTRAPCPP_DEBUG]: PacstrapCppJob::ExecWithOutput() stderr=%s\n" , stderr) ;
- return (QStringList() << stdout << stderr) ;
+ return (QStringList() << QString(status) << stdout << stderr) ;
}
-
-/* PacstrapCppJob protected instance methods */
-
-void PacstrapCppJob::setTargetDevice()
+int PacstrapCppJob::ExecWithStatus(QString command_line)
{
- QString target_device = "" ;
- QVariantList partitions = this->globalStorage->value("partitions").toList() ;
-
- // locate target device for root filesystem
- foreach (const QVariant& partition , partitions)
- {
-QStringList result; for ( auto it = partition.toMap().constBegin(); it != partition.toMap().constEnd(); ++it ) result.append( it.key() + '=' + it.value().toString() );
-printf("[PACSTRAPCPP]: partition=[%s]\n" , result.join(',').toStdString().c_str()) ;
-
- QVariantMap partition_map = partition.toMap() ;
- QString device = partition_map.value("device").toString();
- QString fs = partition_map.value("fs").toString();
- QString mountpoint = partition_map.value("mountPoint").toString();
- QString uuid = partition_map.value("uuid").toString() ;
+printf("PacstrapCppJob::ExecWithStatus() command_line=%s\n" , command_line.toStdString().c_str()) ;
- if (mountpoint == "/") target_device = device ;
-
-if (mountpoint == "/") printf("[PACSTRAPCPP]: target_device=%s\n" , device.toStdString().c_str()) ;
- }
-
- this->globalStorage->insert(TARGET_DEVICE_KEY , target_device) ;
+ return QProcess::execute(QString(SYSTEM_EXEC_FMT).arg(command_line)) ;
}
-qint16 PacstrapCppJob::setNPackages(QString list_packages_cmd)
+QString PacstrapCppJob::ExecWithOutput(QString command_line)
{
- QString new_packages = ExecWithOutput(list_packages_cmd).first() ;
- qint16 n_new_packages = new_packages.count(QChar::LineFeed) ;
- this->nPackages = NPackagesInstalled() + n_new_packages ;
+ return Exec(command_line).at(1) ;
+}
- return this->nPackages ;
+QString PacstrapCppJob::ExecWithError(QString command_line)
+{
+ return Exec(command_line).at(2) ;
}
+
+/* PacstrapCppJob protected instance methods */
+
void PacstrapCppJob::timerEvent(QTimerEvent* event)
{
if (event->timerId() == this->guiTimerId) updateProgress() ;
@@ -233,15 +233,55 @@ void PacstrapCppJob::updateProgress()
{
if (this->nPackages == 0) return ;
- unsigned int progress_percent = (NPackagesInstalled() * 100) / this->nPackages ;
-// qreal progress_percent = nPackagesInstalled() / this->nPackages ;
+ qreal progress_percent = qreal(NPackagesInstalled()) / this->nPackages ;
-printf("\n[PACSTRAPCPP]: n_packages=%d\n" , (int)NPackagesInstalled()) ;
-printf("[PACSTRAPCPP]: this->nPackages=%d\n" , (int)this->nPackages) ;
-printf("[PACSTRAPCPP]: progress_percent=%d\n" , progress_percent) ;
+printf("\n[PACSTRAPCPP]: n_packages=%d this->nPackages=%d progress_percent=%f\n" , NPackagesInstalled() , this->nPackages , (float)progress_percent) ;
-// emit progress(0.5) ;
-// emit progress(progress_percent) ;
-// progress(qreal(progress_percent)) ;
- progress(qreal(progress_percent) / 100.0) ;
+ emit progress(progress_percent) ;
+}
+
+Calamares::JobResult PacstrapCppJob::runJob()
+{
+ QVariantList partitions = this->globalStorage->value(PARTITIONS_KEY).toList() ;
+ bool has_internet = this->globalStorage->value(IS_ONLINE_KEY ).toBool() ;
+ this->targetDevice = FindTargetDevice(partitions) ;
+ this->confFile = (has_internet) ? ONLINE_CONF_FILENAME : OFFLINE_CONF_FILENAME ;
+ this->packages = getPackageList() ;
+
+ if (this->localStorage.empty() ) return JobErrorRetval(CONFIG_ERROR_MSG) ;
+ if (this->targetDevice.isEmpty() ) return JobErrorRetval(TARGET_ERROR_MSG) ;
+ if (!QFile(this->confFile).exists()) return JobErrorRetval(CONFFILE_ERROR_MSG.arg(this->confFile)) ;
+
+// QString keyring_cmd = KEYRING_CMD ;
+ QString mount_cmd = MOUNT_FMT .arg(this->targetDevice , MOUNTPOINT) ;
+ QString chroot_prep_cmd = CHROOT_PREP_FMT .arg(PACKAGES_CACHE_DIR .absolutePath() ,
+ PACKAGES_METADATA_DIR.absolutePath() ) ;
+ QString pacman_sync_cmd = PACKAGES_SYNC_FMT.arg(this->confFile , MOUNTPOINT) ;
+ QString list_packages_cmd = LIST_PACKAGES_FMT.arg(this->confFile , MOUNTPOINT , this->packages) ;
+ QString umount_cmd = UMOUNT_FMT .arg(this->targetDevice) ;
+
+// if (!!ExecWithStatus(keyring_cmd )) return JobErrorRetval(KEYRING_ERROR_MSG) ;
+// "mkdir %2 2> /dev/null" "mount %1 %2"
+ if (!!ExecWithStatus(mount_cmd )) return JobErrorRetval(MOUNT_ERROR_MSG ) ;
+ if (!!ExecWithStatus(chroot_prep_cmd)) return JobErrorRetval(CHROOT_PREP_ERROR_MSG) ;
+ if (!!ExecWithStatus(pacman_sync_cmd)) return JobErrorRetval(PACMAN_SYNC_ERROR_MSG) ;
+
+ if (!this->packages.isEmpty())
+ {
+ QString new_packages = ExecWithOutput(list_packages_cmd) ;
+ this->nPackages = NPackagesInstalled() + new_packages.count(QChar::LineFeed) ;
+
+ if (this->nPackages > 0)
+ {
+// return Calamares::JobResult::error("just cause") ;
+
+ QString exec_error_msg = chrootExec() ;
+ if (!exec_error_msg.isEmpty()) return JobErrorRetval(exec_error_msg) ;
+ }
+ }
+ else emit progress(this->jobWeight) ;
+
+ if (!!ExecWithStatus(umount_cmd)) return JobErrorRetval(UMOUNT_ERROR_MSG) ;
+
+ return JobSuccessRetval() ;
}
diff --git a/src/libcalamares/PacstrapCppJob.h b/src/libcalamares/PacstrapCppJob.h
index 2b9b2adc1..f3017062a 100644
--- a/src/libcalamares/PacstrapCppJob.h
+++ b/src/libcalamares/PacstrapCppJob.h
@@ -45,42 +45,75 @@ public:
QString prettyStatusMessage() const override ;
Calamares::JobResult exec () override ;
+ static const QString DESKTOP_PACKAGES_KEY ;
+
protected:
static Calamares::JobResult JobErrorRetval (QString error_msg) ;
static Calamares::JobResult JobSuccessRetval () ;
static QString QListToString (const QVariantList& package_list) ;
- static qint16 NPackagesInstalled() ;
+ static QString FindTargetDevice (const QVariantList& partitions) ;
+ static unsigned int NPackagesInstalled() ;
+ static QStringList Exec (QString command_line) ;
static int ExecWithStatus (QString command_line) ;
- static QStringList ExecWithOutput (QString command_line) ;
-
- virtual void loadPackageList() = 0 ;
- virtual QString chrootExec () = 0 ;
+ static QString ExecWithOutput (QString command_line) ;
+ static QString ExecWithError (QString command_line) ;
- void setTargetDevice() ;
- qint16 setNPackages (QString packages) ;
- void timerEvent (QTimerEvent* event) override ;
- void updateProgress () ;
+ virtual QString getPackageList() = 0 ;
+ virtual QString chrootExec () = 0 ;
+ void timerEvent (QTimerEvent* event) override ;
+ void updateProgress() ;
+ Calamares::JobResult runJob () ;
static const QString MOUNTPOINT ;
- static const QDir PACKAGES_CACHE_DIR ;
- static const QDir PACKAGES_METADATA_DIR ;
static const char* BASE_JOB_NAME ;
static const char* GUI_JOB_NAME ;
static const char* BASE_STATUS_MSG ;
static const char* GUI_STATUS_MSG ;
static const qreal BASE_JOB_WEIGHT ;
static const qreal GUI_JOB_WEIGHT ;
+ static const QString BASE_PACKAGES_KEY ;
+ static const QString BOOTLODER_PACKAGES_KEY ;
+ static const QString KERNEL_PACKAGES_KEY ;
+ static const QString APPLICATIONS_PACKAGES_KEY ;
+ static const QString MULTIMEDIA_PACKAGES_KEY ;
+ static const QString NETWORK_PACKAGES_KEY ;
+ static const QString THEMES_PACKAGES_KEY ;
+ static const QString UTILITIES_PACKAGES_KEY ;
+ static const QString XSERVER_PACKAGES_KEY ;
+ static const QString MATE_PACKAGES_KEY ;
+ static const QString LXDE_PACKAGES_KEY ;
+ static const QString PACSTRAP_FMT ;
+ static const QString PACSTRAP_ERROR_MSG ;
+
+ QString jobName ;
+ QString statusMsg ;
+ qreal jobWeight ;
+ Calamares::GlobalStorage* globalStorage ;
+ unsigned int guiTimerId ;
+ QString targetDevice ;
+ QString confFile ;
+ QString packages ;
+ unsigned int nPackages ;
+ QVariantMap localStorage ;
+
+
+private:
+
+ static const QDir PACKAGES_CACHE_DIR ;
+ static const QDir PACKAGES_METADATA_DIR ;
static const QString ONLINE_CONF_FILENAME ;
static const QString OFFLINE_CONF_FILENAME ;
static const QString IS_ONLINE_KEY ;
- static const QString TARGET_DEVICE_KEY ;
+ static const QString PARTITIONS_KEY ;
+ static const QString DEVICE_KEY ;
+ static const QString FS_KEY ;
+ static const QString MOUNTPOINT_KEY ;
+ static const QString UUID_KEY ;
static const QString SYSTEM_EXEC_FMT ;
// static const QString KEYRING_CMD ;
-// static const QString KEYRING_CMD ;
- static const QString MKDIR_FMT ;
static const QString MOUNT_FMT ;
static const QString CHROOT_PREP_FMT ;
static const QString PACKAGES_SYNC_FMT ;
@@ -89,16 +122,11 @@ protected:
static const QString CONFIG_ERROR_MSG ;
static const QString TARGET_ERROR_MSG ;
static const QString CONFFILE_ERROR_MSG ;
-
- QString jobName ;
- QString statusMsg ;
- qreal jobWeight ;
- Calamares::GlobalStorage* globalStorage ;
- int guiTimerId ;
- QString confFile ;
- QString packages ;
- qint16 nPackages ;
- QVariantMap localStorage ;
+// static const QString KEYRING_ERROR_MSG ;
+ static const QString MOUNT_ERROR_MSG ;
+ static const QString CHROOT_PREP_ERROR_MSG ;
+ static const QString PACMAN_SYNC_ERROR_MSG ;
+ static const QString UMOUNT_ERROR_MSG ;
} ;
diff --git a/src/modules/pacstrap-base/pacstrap-base.cpp b/src/modules/pacstrap-base/pacstrap-base.cpp
index f0e06506e..138400160 100644
--- a/src/modules/pacstrap-base/pacstrap-base.cpp
+++ b/src/modules/pacstrap-base/pacstrap-base.cpp
@@ -22,6 +22,12 @@
#include "pacstrap-base.h"
+/* PacstrapBaseJob private class constants */
+
+const QString PacstrapBaseJob::GRUB_THEME_FMT = "sed -i 's|[#]GRUB_THEME=.*|GRUB_THEME=/boot/grub/themes/GNUAxiom/theme.txt|' %1/etc/default/grub" ;
+const QString PacstrapBaseJob::GRUB_THEME_ERROR_MSG = "The grub theme installation command has failed." ;
+
+
/* PacstrapBaseJob public instance methods */
PacstrapBaseJob::PacstrapBaseJob(QObject* parent) : PacstrapCppJob(tr(BASE_JOB_NAME) ,
@@ -30,41 +36,34 @@ PacstrapBaseJob::PacstrapBaseJob(QObject* parent) : PacstrapCppJob(tr(BASE_JOB_N
parent ) {}
-/* PacstrapBaseJob protected instance methods */
+/* PacstrapBaseJob protected getters/setters */
-void PacstrapBaseJob::loadPackageList()
+QString PacstrapBaseJob::getPackageList()
{
- this->packages = QListToString(this->localStorage.value("base" ).toList() +
- this->localStorage.value("bootloader").toList() +
- this->localStorage.value("kernel" ).toList() ) ;
+ return QListToString(this->localStorage.value(BASE_PACKAGES_KEY ).toList() +
+ this->localStorage.value(BOOTLODER_PACKAGES_KEY).toList() +
+ this->localStorage.value(KERNEL_PACKAGES_KEY ).toList() ) ;
}
+
+/* PacstrapBaseJob protected instance methods */
+
QString PacstrapBaseJob::chrootExec()
{
- QString pacstrap_cmd = QString("/bin/sh -c \"pacstrap -C %1 %2 %3\"").arg(this->confFile , MOUNTPOINT , this->packages) ;
- QString grub_theme_cmd = QString("/bin/sh -c \"sed -i 's|[#]GRUB_THEME=.*|GRUB_THEME=/boot/grub/themes/GNUAxiom/theme.txt|' %1/etc/default/grub\"").arg(MOUNTPOINT) ;
-
-QString grub_theme_kludge_cmd = QString("/bin/sh -c \"echo GRUB_THEME=/boot/grub/themes/GNUAxiom/theme.txt >> %1/etc/default/grub\"").arg(MOUNTPOINT) ;
-printf("[PACSTRAP-BASE]: grub_theme_cmd=%s\n" , grub_theme_cmd.toStdString().c_str()) ;
-// QProcess::execute( "/bin/sh -c \"ls /tmp/\"" );
+ QString pacstrap_cmd = PACSTRAP_FMT .arg(this->confFile , MOUNTPOINT , packages) ;
+ QString grub_theme_cmd = GRUB_THEME_FMT.arg(MOUNTPOINT) ;
- // boot-strap install root filesystem
-// this->guiTimerId = startTimer(1000) ; updateProgress() ;
+ if (!!ExecWithStatus(pacstrap_cmd)) return PACSTRAP_ERROR_MSG ;
-// #include <QTimer>
-// QTimer *timer = new QTimer(this);
-// connect(timer, SIGNAL(timeout()), this, SLOT(update()));
-// timer->start(1000);
+QString grub_theme_kludge_cmd = QString("echo GRUB_THEME=/boot/grub/themes/GNUAxiom/theme.txt >> %1/etc/default/grub").
+ arg(MOUNTPOINT) ;
+printf("[PACSTRAP-BASE]: grub_theme_cmd=%s\n" , grub_theme_cmd.toStdString().c_str()) ;
+printf("[PACSTRAP-BASE]: grub_theme_cmd IN:\n"); QProcess::execute(QString("/bin/sh -c \"cat %1/etc/default/grub\"").arg(MOUNTPOINT));
- if (QProcess::execute(pacstrap_cmd)) return "PACSTRAP_FAIL" ;
-// m_status = tr( "Installing linux-libre kernel" ); emit progress( 5 );
+ if (!!ExecWithStatus(grub_theme_cmd)) return GRUB_THEME_ERROR_MSG ;
-printf("[PACSTRAP-BASE]: grub_theme_cmd IN:\n"); QProcess::execute(QString("/bin/sh -c \"cat %1/etc/default/grub\"").arg(MOUNTPOINT));
- QProcess::execute(grub_theme_cmd) ;
-QProcess::execute(grub_theme_kludge_cmd) ;
+if (!!ExecWithStatus(grub_theme_kludge_cmd)) return "grub_theme_kludge_cmd failed" ;
printf("[PACSTRAP-BASE]: grub_theme_cmd OUT:\n"); QProcess::execute(QString("/bin/sh -c \"cat %1/etc/default/grub\"").arg(MOUNTPOINT));
-// emit progress(5) ;
-// QProcess::execute( kernel_cmd );
return QString("") ;
}
diff --git a/src/modules/pacstrap-base/pacstrap-base.h b/src/modules/pacstrap-base/pacstrap-base.h
index 63f79acac..48a9b8b1a 100644
--- a/src/modules/pacstrap-base/pacstrap-base.h
+++ b/src/modules/pacstrap-base/pacstrap-base.h
@@ -36,8 +36,14 @@ public:
protected:
- void loadPackageList() override ;
- QString chrootExec () override ;
+ QString getPackageList() override ;
+ QString chrootExec () override ;
+
+
+private:
+
+ static const QString GRUB_THEME_FMT ;
+ static const QString GRUB_THEME_ERROR_MSG ;
} ;
diff --git a/src/modules/pacstrap-gui/pacstrap-gui.conf b/src/modules/pacstrap-gui/pacstrap-gui.conf
index b7e04b9ed..60018a766 100644
--- a/src/modules/pacstrap-gui/pacstrap-gui.conf
+++ b/src/modules/pacstrap-gui/pacstrap-gui.conf
@@ -37,7 +37,7 @@ utilities:
- "zenity"
- "zip"
-xserver:
+x-server:
- "ttf-dejavu"
- "xorg"
- "xorg-drivers"
diff --git a/src/modules/pacstrap-gui/pacstrap-gui.cpp b/src/modules/pacstrap-gui/pacstrap-gui.cpp
index 090dbbddf..b405bb9b1 100644
--- a/src/modules/pacstrap-gui/pacstrap-gui.cpp
+++ b/src/modules/pacstrap-gui/pacstrap-gui.cpp
@@ -22,6 +22,12 @@
#include "pacstrap-gui.h"
+/* PacstrapGuiJob private class constants */
+
+const QString PacstrapGuiJob::WALLPAPER_FMT = "cp /etc/wallpaper.png %1/etc/" ;
+const QString PacstrapGuiJob::WALLPAPER_ERROR_MSG = "The wallpaper installation command has failed." ;
+
+
/* PacstrapGuiJob public instance methods */
PacstrapGuiJob::PacstrapGuiJob(QObject* parent) : PacstrapCppJob(tr(GUI_JOB_NAME) ,
@@ -30,36 +36,40 @@ PacstrapGuiJob::PacstrapGuiJob(QObject* parent) : PacstrapCppJob(tr(GUI_JOB_NAME
parent ) {}
-/* PacstrapGuiJob protected instance methods */
+/* PacstrapGuiJob protected getters/setters */
-void PacstrapGuiJob::loadPackageList()
+QString PacstrapGuiJob::getPackageList()
{
-globalStorage->insert("default-desktop", "mate") ; // TODO: per user option via globalStorage
-printf("[PACSTRAP-GUI]: DesktopCppJob::exec() default_desktop=%s" , globalStorage->value("default-desktop").toString().toStdString().c_str()) ;
-
- QString desktop = this->globalStorage->value("default-desktop").toString() ;
- this->packages = QListToString(this->localStorage.value("applications").toList() +
- this->localStorage.value("multimedia" ).toList() +
- this->localStorage.value("network" ).toList() +
- this->localStorage.value("themes" ).toList() +
- this->localStorage.value("utilities" ).toList() +
- this->localStorage.value("xserver" ).toList() +
- this->localStorage.value(desktop ).toList() ) ;
+globalStorage->insert(DESKTOP_PACKAGES_KEY , MATE_PACKAGES_KEY) ; // TODO: per user option via globalStorage
+printf("[PACSTRAP-GUI]: DesktopCppJob::getPackageList() default_desktop=%s" , globalStorage->value(DESKTOP_PACKAGES_KEY).toString().toStdString().c_str()) ;
+
+ QString desktop = this->globalStorage->value(DESKTOP_PACKAGES_KEY).toString() ;
+
+ return QListToString(this->localStorage.value(APPLICATIONS_PACKAGES_KEY).toList() +
+ this->localStorage.value(MULTIMEDIA_PACKAGES_KEY ).toList() +
+ this->localStorage.value(NETWORK_PACKAGES_KEY ).toList() +
+ this->localStorage.value(THEMES_PACKAGES_KEY ).toList() +
+ this->localStorage.value(UTILITIES_PACKAGES_KEY ).toList() +
+ this->localStorage.value(XSERVER_PACKAGES_KEY ).toList() +
+ this->localStorage.value(desktop ).toList() ) ;
}
+
+/* PacstrapGuiJob protected instance methods */
+
QString PacstrapGuiJob::chrootExec()
{
- QString pacstrap_cmd = QString("/bin/sh -c \"pacstrap -c -C %1 %2 %3\"").arg(this->confFile , MOUNTPOINT , packages) ;
- QString wallpaper_cmd = QString("/bin/sh -c \"cp /etc/wallpaper.png %1/etc/\"").arg(MOUNTPOINT) ;
+ QString pacstrap_cmd = PACSTRAP_FMT .arg(this->confFile , MOUNTPOINT , packages) ;
+ QString wallpaper_cmd = WALLPAPER_FMT.arg(MOUNTPOINT) ;
- if (QProcess::execute(pacstrap_cmd)) return "PACSTRAP_FAIL" ;
+ if (!!ExecWithStatus(pacstrap_cmd)) return PACSTRAP_ERROR_MSG ;
printf("[PACSTRAP-GUI]: ls /etc/skel") ; QProcess::execute(QString("/bin/sh -c \"ls -al /etc/skel/\"" ) ) ;
printf("[PACSTRAP-GUI]: ls chroot/etc/skel/") ; QProcess::execute(QString("/bin/sh -c \"ls -al %1/etc/skel/\"" ).arg(MOUNTPOINT)) ;
printf("[PACSTRAP-GUI]: ls chroot/etc/wallpaper.png") ; QProcess::execute(QString("/bin/sh -c \"ls -al %1/etc/wallpaper.png\"").arg(MOUNTPOINT)) ;
printf("[PACSTRAP-GUI]: ls chroot/etc/sudoers*") ; QProcess::execute(QString("/bin/sh -c \"ls -al %1/etc/sudoers*\"" ).arg(MOUNTPOINT)) ;
- QProcess::execute(wallpaper_cmd) ;
+ if (!!ExecWithStatus(wallpaper_cmd)) return WALLPAPER_ERROR_MSG ;
printf("[PACSTRAP-GUI]: ls chroot/etc/wallpaper.png") ; QProcess::execute(QString("/bin/sh -c \"ls -al %1/etc/wallpaper.png\"").arg(MOUNTPOINT)) ;
diff --git a/src/modules/pacstrap-gui/pacstrap-gui.h b/src/modules/pacstrap-gui/pacstrap-gui.h
index da0297fd5..6e310f18a 100644
--- a/src/modules/pacstrap-gui/pacstrap-gui.h
+++ b/src/modules/pacstrap-gui/pacstrap-gui.h
@@ -36,8 +36,14 @@ public:
protected:
- void loadPackageList() override ;
- QString chrootExec () override ;
+ QString getPackageList() override ;
+ QString chrootExec () override ;
+
+
+private:
+
+ static const QString WALLPAPER_FMT ;
+ static const QString WALLPAPER_ERROR_MSG ;
} ;