summaryrefslogtreecommitdiff
path: root/src/modules/oemid/IDJob.cpp
blob: 16461b1912d7746f560d5d143d54546ce9c842b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/* === This file is part of Calamares - <https://github.com/calamares> ===
 *
 *   Copyright 2019, Adriaan de Groot <groot@kde.org>
 *
 *   Calamares is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   Calamares is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with Calamares. If not, see <http://www.gnu.org/licenses/>.
 */

#include "IDJob.h"

#include "GlobalStorage.h"
#include "JobQueue.h"
#include "Settings.h"

#include "utils/Logger.h"

#include <QDir>
#include <QFile>

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 <code>%1</code>." ).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 <code>%1</code>." ).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 <code>%1</code>." ).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 );
}