install: add checking mount system for rpm file
authorMunkyu Im <munkyu.im@samsung.com>
Sun, 28 May 2017 08:44:03 +0000 (17:44 +0900)
committerMunkyu Im <munkyu.im@samsung.com>
Mon, 29 May 2017 13:17:54 +0000 (22:17 +0900)
User cannot install rpm file under read only root file system.
In this case, shows warning message.

Change-Id: I530c5c585301f8796e35d025cdf6c8d6a3d0051b
Signed-off-by: Munkyu Im <munkyu.im@samsung.com>
tizen/src/ui/menu/sdbhelper.cpp
tizen/src/ui/menu/sdbhelper.h
tizen/src/ui/menu/sdbhelperthread.cpp
tizen/src/ui/menu/sdbhelperthread.h
tizen/src/ui/resource/ui_strings.h

index c1da058..31d158f 100644 (file)
@@ -123,12 +123,13 @@ void SdbHelper::push(QList<QString> srcList, const QString &dest)
     SdbHelperThread *thread = new SdbHelperThread(this);
     thread->setArguments(SDB_PUSH_COMMNAD , program, argList);
     connect(thread, SIGNAL(started()), this, SLOT(handleThreadStarted()));
+    connect(thread, SIGNAL(error(QString)), this, SLOT(handleError(QString)));
     connect(thread, SIGNAL(finished()), this, SLOT(handleThreadFinished()));
     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
     thread->start();
 }
 
-void SdbHelper::install(QFileInfo fi)
+void SdbHelper::install(QFileInfo &fi)
 {
     if (QString::compare(fi.suffix(), FILE_EXTENSION_RPM, Qt::CaseInsensitive) == 0) {
         installRpm(fi);
@@ -152,7 +153,7 @@ void SdbHelper::install(QFileInfo fi)
     thread->start();
 }
 
-void SdbHelper::installRpm(QFileInfo fi)
+void SdbHelper::installRpm(QFileInfo &fi)
 {
     QString program;
     QStringList argRootOn;
@@ -160,6 +161,7 @@ void SdbHelper::installRpm(QFileInfo fi)
     QStringList argInstall;
     QStringList argRemove;
     QStringList argRootOff;
+    QStringList argCheckMount;
     QList<QStringList> argList;
     QString baseName = fi.fileName();
     QString destFileName = QString(GUEST_TMP_PATH + baseName);
@@ -172,6 +174,14 @@ void SdbHelper::installRpm(QFileInfo fi)
         return;
     }
 
+    QProcess process;
+
+    argCheckMount << "-s" << sdbSerialName << "shell" << "mount";
+    argCheckMount << "|" << "grep" << "on / type";
+    argCheckMount << "|" << "/usr/bin/cut" << "-d" << "\"(\"" << "-f2";
+    argCheckMount << "|" << "/usr/bin/cut" << "-d" << "\")\"" << "-f1";
+    argList << argCheckMount;
+
     //FIXME: (sdb) cannot check sdb root status
     argRootOn << "-s" << sdbSerialName << "root" << "on";
     argList << argRootOn;
@@ -191,12 +201,20 @@ void SdbHelper::installRpm(QFileInfo fi)
     qDebug() << program << argList;
 
     SdbHelperThread *thread = new SdbHelperThread(this);
-    thread->setArguments(SDB_INSTALL_COMMAND, program, argList);
+    thread->setArguments(SDB_INSTALL_RPM_COMMAND, program, argList);
     connect(thread, SIGNAL(started()), this, SLOT(handleThreadStarted()));
+    connect(thread, SIGNAL(error(QString)), this, SLOT(handleError(QString)));
     connect(thread, SIGNAL(finished()), this, SLOT(handleThreadFinished()));
     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
     thread->start();
+    return;
 }
+void SdbHelper::handleError(QString message)
+{
+    QMessageBox::warning(mainWindow, EMULATOR_TITLE, message,
+                QMessageBox::Ok | QMessageBox::Default);
+}
+
 
 void SdbHelper::handleThreadStarted()
 {
index cb16241..67c2eeb 100644 (file)
@@ -44,7 +44,7 @@ public:
     QString getSdbPath();
     QString getGuestDefaultPushPath();
     QString getSerialName();
-    void install(QFileInfo fi);
+    void install(QFileInfo &fi);
     void push(QList<QString> src, const QString &dest);
     void openShell(QString title);
     bool isProgressing();
@@ -67,12 +67,13 @@ private:
     QProcess *process;
     DisplayBase *displaybase;
     void setProgressing(bool isProgressing);
-    void installRpm(QFileInfo fi);
+    void installRpm(QFileInfo &fi);
 
 public slots:
     void handleThreadStarted();
     void handleThreadFinished();
     void handleGeometryChanged(QRect rect);
+    void handleError(QString message);
 };
 
 #endif // SDBHELPER_H
index dec4171..2de9cc8 100644 (file)
@@ -66,9 +66,14 @@ void SdbHelperThread::run()
         errorMsg = QString::fromLocal8Bit(process->readAllStandardError());
         qDebug() << "errorMsg" << errorMsg;
         qDebug() << "outMsg" << outMsg;
+        if (command == SDB_INSTALL_RPM_COMMAND && i == 0 && outMsg.startsWith("ro")) {
+            qWarning() << "read only platform";
+            emit error(QString(MSG_MOUNT_WARNING));
+            return;
+        }
 
         //FIXME: (sdb) general sdb installation failure message is printed with stdout */
-        if (command == SDB_INSTALL_COMMAND && outMsg.contains(SDB_INSTALL_FAILURE)) {
+        if (command != SDB_PUSH_COMMNAD && outMsg.contains(SDB_INSTALL_FAILURE)) {
             emit errorOccured(outMsg, process->exitCode());
             return;
         }
index 162ce18..dcdb4f4 100644 (file)
@@ -57,6 +57,7 @@ private:
 signals:
     void errorOccured(QString errString, int exitCode);
     void finished(QString outMsg);
+    void error(QString message);
 
 public slots:
     void handleErrorOccured(QString errString, int exitCode);
index a17e9aa..b7892d7 100644 (file)
 #define SDB_INSTALL_FAILURE "val[fail]"
 #define SDB_PUSH_COMMNAD 1
 #define SDB_INSTALL_COMMAND 2
+#define SDB_INSTALL_RPM_COMMAND 3
 #define PROGRESSBAR_DEFAULT_WITDH 100
 #define PROGRESSBAR_DEFAULT_HEIGHT 20
 
 #define MSG_SDB_FAILED_PROCESSING "Failed while processing.\n\nError Message:\n"
 #define MSG_SDB_ROOT_ON "This job needs root priviledge.\n"\
                         "Are you sure you want to continue?"
+#define MSG_MOUNT_WARNING "Unable to install rpm package!\nRoot filesystem is read-only.\n"\
+                          "Remount the root filesystem with read-write and retry."
 #define MSG_EMPTY_DIR "Target directory is empty.\n"
 
 /* qFatal messages */