diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2017-10-28 09:07:39 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2017-12-01 21:55:38 -0500 |
commit | 8f6fe713abba9f6a3107bc8898074c51c2ffefda (patch) | |
tree | fa67ce5cef10184c2565aabe0fc7190e8d3616bc | |
parent | 4faab230b7a670c694c8d083a8d6df57105e2b0b (diff) |
debug
-rw-r--r-- | src/libcalamares/PacstrapCppJob.cpp | 262 | ||||
-rw-r--r-- | src/libcalamares/PacstrapCppJob.h | 76 | ||||
-rw-r--r-- | src/modules/pacstrap-base/pacstrap-base.cpp | 47 | ||||
-rw-r--r-- | src/modules/pacstrap-base/pacstrap-base.h | 10 | ||||
-rw-r--r-- | src/modules/pacstrap-gui/pacstrap-gui.conf | 2 | ||||
-rw-r--r-- | src/modules/pacstrap-gui/pacstrap-gui.cpp | 44 | ||||
-rw-r--r-- | src/modules/pacstrap-gui/pacstrap-gui.h | 10 |
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 ; } ; |