Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(416)

Side by Side Diff: src/platform/update_engine/postinstall_runner_action.cc

Issue 1881001: AU: Many minor cleanup changes (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: fixes for review Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "update_engine/postinstall_runner_action.h" 5 #include "update_engine/postinstall_runner_action.h"
6 #include <sys/mount.h> 6 #include <sys/mount.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <vector>
9 #include "update_engine/subprocess.h"
8 #include "update_engine/utils.h" 10 #include "update_engine/utils.h"
9 11
10 namespace chromeos_update_engine { 12 namespace chromeos_update_engine {
11 13
12 using std::string; 14 using std::string;
15 using std::vector;
13 16
14 namespace { 17 namespace {
15 const string kMountPath(string(utils::kStatefulPartition) + "/au_destination");
16 const string kPostinstallScript("/postinst"); 18 const string kPostinstallScript("/postinst");
17 } 19 }
18 20
19 void PostinstallRunnerAction::PerformAction() { 21 void PostinstallRunnerAction::PerformAction() {
20 CHECK(HasInputObject()); 22 CHECK(HasInputObject());
21 const string install_device = GetInputObject(); 23 const InstallPlan install_plan = GetInputObject();
24 const string install_device = install_plan.install_path;
25 ScopedActionCompleter completer(processor_, this);
26
27 utils::BootLoader boot_loader;
28 TEST_AND_RETURN(utils::GetBootloader(&boot_loader));
22 29
23 int rc = mount(install_device.c_str(), kMountPath.c_str(), "ext3", 0, NULL); 30 bool read_only = (boot_loader == utils::BootLoader_CHROME_FIRMWARE);
24 if (rc < 0) { 31
25 LOG(ERROR) << "Unable to mount destination device " << install_device 32 // Make mountpoint
26 << " onto " << kMountPath; 33 string temp_dir;
27 processor_->ActionComplete(this, false); 34 TEST_AND_RETURN(utils::MakeTempDirectory("/tmp/au_postint_mount.XXXXXX",
28 return; 35 &temp_dir));
36 ScopedDirRemover temp_dir_remover(temp_dir);
37
38 {
39 // Scope for the mount
40 unsigned long mountflags = read_only ? MS_RDONLY : 0;
41
42 int rc = mount(install_device.c_str(),
43 temp_dir.c_str(),
44 "ext3",
45 mountflags,
46 NULL);
47 if (rc < 0) {
48 LOG(ERROR) << "Unable to mount destination device " << install_device
49 << " onto " << temp_dir;
50 return;
51 }
52 ScopedFilesystemUnmounter unmounter(temp_dir);
53
54 // run postinstall script
55 vector<string> command;
56 command.push_back(temp_dir + kPostinstallScript);
57 command.push_back(install_device);
58 command.push_back(precommit_ ? "" : "--postcommit");
59 rc = 0;
60 TEST_AND_RETURN(Subprocess::SynchronousExec(command, &rc));
61 bool success = (rc == 0);
62 if (!success) {
63 LOG(ERROR) << "Postinst command failed with code: " << rc;
64 return;
65 }
29 } 66 }
30 67
31 // run postinstall script 68 if (HasOutputPipe()) {
32 rc = system((kMountPath + kPostinstallScript + " " + install_device).c_str()); 69 SetOutputObject(install_plan);
33 bool success = (rc == 0);
34 if (!success) {
35 LOG(ERROR) << "Postinst command failed with code: " << rc;
36 } 70 }
37 71 completer.set_success(true);
38 rc = umount(kMountPath.c_str());
39 if (rc < 0) {
40 // non-fatal
41 LOG(ERROR) << "Unable to umount destination device";
42 }
43 if (success && HasOutputPipe()) {
44 SetOutputObject(install_device);
45 }
46 processor_->ActionComplete(this, success);
47 } 72 }
48 73
49 } // namespace chromeos_update_engine 74 } // namespace chromeos_update_engine
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698