/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "IDJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include #include IDJob::IDJob( const QString& id, QObject* parent ) : Job( parent ) , m_batchIdentifier( id ) { } QString IDJob::prettyName() const { return tr( "OEM Batch Identifier" ); } Calamares::JobResult IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) { if ( !QDir().mkpath( dirs ) ) { cError() << "Could not create directories" << dirs; return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), tr( "Could not create directories %1." ).arg( dirs ) ); } QFile output( QDir( dirs ).filePath( filename ) ); if ( output.exists() ) { cWarning() << "Existing OEM Batch ID" << output.fileName() << "overwritten."; } if ( !output.open( QIODevice::WriteOnly ) ) { cError() << "Could not write to" << output.fileName(); return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), tr( "Could not open file %1." ).arg( output.fileName() ) ); } if ( output.write( contents.toUtf8() ) < 0 ) { cError() << "Write error on" << output.fileName(); return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), tr( "Could not write to file %1." ).arg( output.fileName() ) ); } output.write( "\n" ); // Ignore error on this one return Calamares::JobResult::ok(); } Calamares::JobResult IDJob::exec() { cDebug() << "Setting OEM Batch ID to" << m_batchIdentifier; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString targetDir = QStringLiteral( "/var/log/installer/" ); QString targetFile = QStringLiteral( "oem-id" ); QString rootMount = gs->value( "rootMountPoint" ).toString(); // Don't bother translating internal errors if ( rootMount.isEmpty() && Calamares::Settings::instance()->doChroot() ) return Calamares::JobResult::internalError( "OEM Batch Identifier", "No rootMountPoint is set, but a chroot is required. " "Is there a module before oemid that sets up the partitions?", Calamares::JobResult::InvalidConfiguration ); return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, targetFile, m_batchIdentifier ); }