aboutsummaryrefslogtreecommitdiffstats
path: root/main/apk-tools/0004-db-Allow-override-arch-when-using-root.patch
blob: fe1a64b6b4a5f79fb00b9f3d91ef8b2c24bd0186 (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
From cec1fa2b0f414e980c4dc56a5cc4dc9ff48bddb8 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 14 Apr 2011 21:48:49 +0200
Subject: [PATCH 4/7] db: Allow override arch when using --root

This is so we can do x86 --root installs on x86_64 hosts.

Using --arch without --root can make great damage so we only enable it
if --root is used.
---
 src/apk.c          |    5 +++++
 src/apk_database.h |    1 +
 src/database.c     |    7 +++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/apk.c b/src/apk.c
index 55963b0..c40cc20 100644
--- a/src/apk.c
+++ b/src/apk.c
@@ -66,6 +66,8 @@ static struct apk_option generic_options[] = {
 				required_argument, "REPOFILE" },
 	{ 0x109, "no-network",	"Do not use network (cache is still used)" },
 	{ 0x111, "overlay-from-stdin", "Read list of overlay files from stdin" },
+	{ 0x112, "arch", 	"Use architecture with --root",
+				required_argument, "ARCH" },
 };
 
 static int version(void)
@@ -369,6 +371,9 @@ int main(int argc, char **argv)
 		case 0x111:
 			apk_flags |= APK_OVERLAY_FROM_STDIN;
 			break;
+		case 0x112:
+			dbopts.arch = optarg;
+			break;
 		default:
 			if (applet == NULL || applet->parse == NULL ||
 			    applet->parse(ctx, &dbopts, r,
diff --git a/src/apk_database.h b/src/apk_database.h
index 68bba08..9b032e7 100644
--- a/src/apk_database.h
+++ b/src/apk_database.h
@@ -95,6 +95,7 @@ struct apk_db_options {
 	int lock_wait;
 	unsigned long open_flags;
 	char *root;
+	char *arch;
 	char *keys_dir;
 	char *repositories_file;
 	struct list_head repository_list;
diff --git a/src/database.c b/src/database.c
index 1376ec3..45960d2 100644
--- a/src/database.c
+++ b/src/database.c
@@ -49,7 +49,6 @@ enum {
 
 int apk_verbosity = 1;
 unsigned int apk_flags = 0;
-const char *apk_arch = APK_DEFAULT_ARCH;
 
 const char * const apkindex_tar_gz = "APKINDEX.tar.gz";
 static const char * const apk_static_cache_dir = "var/cache/apk";
@@ -1149,6 +1148,11 @@ int apk_db_open(struct apk_database *db, struct apk_db_options *dbopts)
 	apk_string_array_init(&db->protected_paths);
 	db->permanent = 1;
 
+	if (dbopts->root && dbopts->arch) {
+		db->arch = apk_blob_atomize(APK_BLOB_STR(dbopts->arch));
+	} else {
+		db->arch = apk_blob_atomize(APK_BLOB_STR(APK_DEFAULT_ARCH));
+	}
 	db->root = strdup(dbopts->root ?: "/");
 	db->root_fd = openat(AT_FDCWD, db->root, O_RDONLY | O_CLOEXEC);
 	if (db->root_fd < 0 && (dbopts->open_flags & APK_OPENF_CREATE)) {
@@ -1226,7 +1230,6 @@ int apk_db_open(struct apk_database *db, struct apk_db_options *dbopts)
 		db->cachetmp_fd = db->cache_fd;
 	}
 
-	db->arch = apk_blob_atomize(APK_BLOB_STR(apk_arch));
 	db->keys_fd = openat(db->root_fd,
 			     dbopts->keys_dir ?: "etc/apk/keys",
 			     O_RDONLY | O_CLOEXEC);
-- 
1.7.4.5