[debroot] Use single sysroot for all architectures

Rather than producing separate sysroots for different architectures,
we produce a single sysroot that contains all architectures and rely
on multiarch support in the compiler to pick up the right files for
each target.

Additionally, this change also includes libxi package which is needed by
glfw3.3, removes libgcc which is no longer needed now that compiler-rt
provides crtbegin.o/crtend, and switches over to the snapshot mirror as
the source for packages.

Bug: TC-562
Change-Id: I5eee2c47424e1720878e9b43b47428326ef9e9c1
diff --git a/cmd/debroot/main.go b/cmd/debroot/main.go
index b4b0e2e..d8d1552 100644
--- a/cmd/debroot/main.go
+++ b/cmd/debroot/main.go
@@ -38,7 +38,9 @@
 //   gpg --output ./debian-archive-stretch-stable.gpg --export $KEYS
 
 const (
-	aptRepo = "http://http.us.debian.org/debian"
+	// http://http.us.debian.org/debian no longer contains arm64 packages
+	// for jessie so we instead use the last snapshot that still has them.
+	aptRepo = "https://snapshot.debian.org/archive/debian/20190324T093412Z"
 )
 
 type stringsValue []string
@@ -53,15 +55,16 @@
 }
 
 type Config struct {
-	Dists      []string  `yaml:"dists"`
-	Components []string  `yaml:"components"`
-	Keyring    string    `yaml:"keyring"`
-	Packages   []Package `yaml:"packages"`
+	Dists         []string  `yaml:"dists"`
+	Components    []string  `yaml:"components"`
+	Keyring       string    `yaml:"keyring"`
+	Architectures []string  `yaml:"architectures"`
+	Packages      []Package `yaml:"packages"`
 }
 
 type Package struct {
-	Name string   `yaml:"package"`
-	Arch []string `yaml:"arch,omitempty"`
+	Name          string   `yaml:"package"`
+	Architectures []string `yaml:"architectures,omitempty"`
 }
 
 type Lockfile struct {
@@ -77,12 +80,6 @@
 	Hash     string `yaml:"hash"`
 }
 
-type Arch struct {
-	Name     string `yaml:"name"`
-	Filename string `yaml:"filename"`
-	Hash     string `yaml:"hash"`
-}
-
 type Locks []Lock
 
 func (l Locks) Len() int {
@@ -94,6 +91,9 @@
 }
 
 func (l Locks) Less(i, j int) bool {
+	if l[i].Name == l[j].Name {
+		return l[i].Filename < l[j].Filename
+	}
 	return l[i].Name < l[j].Name
 }
 
@@ -129,8 +129,8 @@
 	return descriptors, nil
 }
 
-func downloadPackageList(config *Config, arch string, depends bool) ([]Lock, error) {
-	pkgs := map[string]Descriptor{}
+func downloadPackageList(config *Config, depends bool) ([]Lock, error) {
+	descriptors := map[string]map[string]Descriptor{}
 
 	file, err := os.Open(config.Keyring)
 	if err != nil {
@@ -155,6 +155,19 @@
 		if err != nil {
 			return nil, err
 		}
+		var lines []string
+		sha256section := false
+		for _, l := range strings.Split(string(b), "\n") {
+			if sha256section {
+				if strings.HasPrefix(l, " ") {
+					lines = append(lines, l[1:])
+				} else {
+					sha256section = false
+				}
+			} else if strings.HasPrefix(l, "SHA256:") {
+				sha256section = true
+			}
+		}
 
 		u, err = url.Parse(aptRepo)
 		u.Path = path.Join(u.Path, "dists", dist, "Release.gpg")
@@ -169,102 +182,152 @@
 			return nil, err
 		}
 
-		for _, c := range config.Components {
-			u, err := url.Parse(aptRepo)
-			u.Path = path.Join(u.Path, "dists", dist, c, "binary-"+arch, "Packages.gz")
-			r, err := http.Get(u.String())
-			if err != nil {
-				return nil, err
-			}
-			defer r.Body.Close()
-
-			buf, err := ioutil.ReadAll(r.Body)
-			if err != nil {
-				return nil, err
-			}
-
-			f := path.Join(c, "binary-"+arch, "Packages.gz")
-			l := regexp.MustCompile(`([0-9a-z]{64})\s+\d+\s+` + f)
-			m := l.FindStringSubmatch(string(b))
-
-			sum := sha256.Sum256(buf)
-			if m[1] != hex.EncodeToString(sum[:]) {
-				return nil, fmt.Errorf("%s: checksum doesn't match", f)
-			}
-
-			g, err := gzip.NewReader(bytes.NewReader(buf))
-			if err != nil {
-				return nil, err
-			}
-
-			ps, err := parsePackages(g)
-			if err != nil {
-				return nil, err
-			}
-
-			// We only want development libraries, filter out everything else.
-			for _, p := range ps {
-				// Use sections as a coarse grained filter.
-				var section bool
-				switch p["Section"] {
-				case "libs", "libdevel", "devel", "x11":
-					section = true
+		for _, a := range config.Architectures {
+			for _, c := range config.Components {
+				u, err := url.Parse(aptRepo)
+				u.Path = path.Join(u.Path, "dists", dist, c, "binary-"+a, "Packages.gz")
+				r, err := http.Get(u.String())
+				if err != nil {
+					return nil, err
 				}
-				// Use tags as a more fine-grained filter.
-				var tag bool
-				for _, n := range strings.Split(p["Tag"], ", ") {
-					t := strings.Split(strings.TrimSpace(n), " ")[0]
-					switch t {
-					case "devel::library", "x11::library", "role::devel-lib", "role::shared-lib":
-						tag = true
+				defer r.Body.Close()
+
+				buf, err := ioutil.ReadAll(r.Body)
+				if err != nil {
+					return nil, err
+				}
+
+				var checksum string
+				f := path.Join(c, "binary-"+a, "Packages.gz")
+				for _, l := range lines {
+					if strings.HasSuffix(l, f) {
+						checksum = strings.Fields(l)[0]
+						break
 					}
 				}
-				// Skip everything that doesn't match.
-				if section && tag {
-					pkgs[p["Package"]] = p
+				if checksum == "" {
+					return nil, fmt.Errorf("%s: checksum missing", f)
+				}
+
+				sum := sha256.Sum256(buf)
+				if checksum != hex.EncodeToString(sum[:]) {
+					return nil, fmt.Errorf("%s: checksum doesn't match", f)
+				}
+
+				g, err := gzip.NewReader(bytes.NewReader(buf))
+				if err != nil {
+					return nil, err
+				}
+
+				ps, err := parsePackages(g)
+				if err != nil {
+					return nil, err
+				}
+
+				// We only want development libraries, filter out everything else.
+				for _, p := range ps {
+					// Use sections as a coarse grained filter.
+					var section bool
+					switch p["Section"] {
+					case "libs", "libdevel", "devel", "x11":
+						section = true
+					}
+					// Use tags as a more fine-grained filter.
+					var tag bool
+					for _, n := range strings.Split(p["Tag"], ", ") {
+						t := strings.Split(strings.TrimSpace(n), " ")[0]
+						switch t {
+						case "devel::library", "x11::library", "role::devel-lib", "role::shared-lib":
+							tag = true
+						}
+					}
+					// Skip everything that doesn't match.
+					if section && tag {
+						n := p["Package"]
+						if _, ok := descriptors[n]; !ok {
+							descriptors[n] = map[string]Descriptor{}
+						}
+						descriptors[n][a] = p
+					}
 				}
 			}
 		}
 	}
 
-	var queue []string
+	type dependency struct {
+		name         string
+		architecture string
+	}
+
+	// Place the initial set of packages into queue.
+	var queue []dependency
 	for _, p := range config.Packages {
-		if pkg, ok := pkgs[p.Name]; ok {
-			queue = append(queue, pkg["Package"])
+		if len(p.Architectures) > 0 {
+			for _, a := range p.Architectures {
+				queue = append(queue, dependency{
+					name:         p.Name,
+					architecture: a,
+				})
+			}
 		} else {
-			for _, a := range p.Arch {
-				if a == arch {
-					fmt.Printf("Package %s not found\n", p.Name)
-				}
+			for _, a := range config.Architectures {
+				queue = append(queue, dependency{
+					name:         p.Name,
+					architecture: a,
+				})
 			}
 		}
 	}
 
-	locks := map[string]Lock{}
+	// Process all dependencies until we drain the queue.
+	locks := map[string]map[string]Lock{}
 	for len(queue) > 0 {
 		p := queue[0]
 		queue = queue[1:]
-		if _, ok := locks[p]; ok {
-			continue
+		if lock, ok := locks[p.name]; ok {
+			if _, ok := lock[p.architecture]; ok {
+				continue
+			}
 		}
-		if pkg, ok := pkgs[p]; ok {
-			locks[p] = Lock{
-				Name:     pkg["Package"],
-				Version:  pkg["Version"],
-				Filename: pkg["Filename"],
-				Hash:     pkg["SHA256"],
+		if ds, ok := descriptors[p.name]; ok {
+			if _, ok := locks[p.name]; !ok {
+				locks[p.name] = map[string]Lock{}
 			}
-			if depends {
-				for _, n := range strings.Split(pkg["Depends"], ", ") {
-					d := strings.Split(strings.TrimSpace(n), " ")[0]
-					queue = append(queue, d)
+			if pkg, ok := ds[p.architecture]; ok {
+				locks[p.name][p.architecture] = Lock{
+					Name:     pkg["Package"],
+					Version:  pkg["Version"],
+					Filename: pkg["Filename"],
+					Hash:     pkg["SHA256"],
 				}
+				if depends {
+					for _, n := range strings.Split(pkg["Depends"], ", ") {
+						d := strings.Split(strings.TrimSpace(n), " ")[0]
+						queue = append(queue, dependency{
+							name:         d,
+							architecture: p.architecture,
+						})
+					}
+				}
+			} else {
+				return nil, fmt.Errorf("package %q not found for architecture %q", p.name, p.architecture)
 			}
+		} else {
+			return nil, fmt.Errorf("package %q not found", p.name)
 		}
 	}
 
+	// Eliminate all duplicates.
+	hashes := map[string]Lock{}
+	for _, l := range locks {
+		for _, p := range l {
+			hashes[p.Hash] = p
+		}
+	}
+
+	// Flatten into a list.
 	var list []Lock
-	for _, p := range locks {
+	for _, p := range hashes {
 		list = append(list, p)
 	}
 
@@ -542,7 +605,6 @@
 }
 
 type updateCmd struct {
-	arch     string
 	config   string
 	lockfile string
 	depends  bool
@@ -551,13 +613,12 @@
 func (*updateCmd) Name() string     { return "update" }
 func (*updateCmd) Synopsis() string { return "Update the lock file." }
 func (*updateCmd) Usage() string {
-	return `update [-arch] [-packages] [-list]:
+	return `update [-config] [-lock] [-depends]:
 	Update the lock file to include specific package versions.
 `
 }
 
 func (c *updateCmd) SetFlags(f *flag.FlagSet) {
-	f.StringVar(&c.arch, "arch", "amd64", "Target architecture")
 	f.StringVar(&c.config, "config", "packages.yml", "Package configuration")
 	f.StringVar(&c.lockfile, "lock", "packages.lock", "Lockfile filename")
 	f.BoolVar(&c.depends, "depends", false, "Transitively include dependencies")
@@ -580,7 +641,7 @@
 		return subcommands.ExitUsageError
 	}
 
-	list, err := downloadPackageList(config, c.arch, c.depends)
+	list, err := downloadPackageList(config, c.depends)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "failed to download package list: %v\n", err)
 		return subcommands.ExitFailure
@@ -590,13 +651,13 @@
 	hash := sha256.New()
 	hash.Write(d)
 
-	pkgs := Lockfile{
+	lockfile := Lockfile{
 		Updated:  time.Now(),
 		Hash:     fmt.Sprintf("%x", hash.Sum(nil)),
 		Packages: list,
 	}
 
-	l, err := yaml.Marshal(&pkgs)
+	l, err := yaml.Marshal(&lockfile)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "failed to marshal lockfile: %v\n", err)
 		return subcommands.ExitFailure
@@ -611,7 +672,6 @@
 }
 
 type installCmd struct {
-	arch      string
 	outDir    string
 	debsCache string
 }
diff --git a/cmd/debroot/packages-amd64.lock b/cmd/debroot/packages-amd64.lock
deleted file mode 100644
index f23a8a3..0000000
--- a/cmd/debroot/packages-amd64.lock
+++ /dev/null
@@ -1,103 +0,0 @@
-hash: 369c7ba0ff758f0199c2eeca8e730161bb38881ed43806d7791393fa6d6a2aba
-updated: 2019-01-17T20:05:01.055378751-08:00
-packages:
-- package: libc6
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_amd64.deb
-  hash: 0a95ee1c5bff7f73c1279b2b78f32d40da9025a76f93cb67c03f2867a7133e61
-- package: libc6-dev
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_amd64.deb
-  hash: 00ba98ce8879bdfde13eac699da718d3aaba904ea6a88d5e21e77d1e298d65eb
-- package: libgcc-4.9-dev
-  version: 4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc-4.9-dev_4.9.2-10+deb8u1_amd64.deb
-  hash: db89814eb484edf5d9c24a9def334ca1eac22afbfd3f8b23f12262e217ac80ff
-- package: libgcc1
-  version: 1:4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc1_4.9.2-10+deb8u1_amd64.deb
-  hash: 3101d5dc171fab3b4601bc3282bbc69f0fb9cfd1e1761389e1e6d2590e384623
-- package: libgl1-mesa-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_amd64.deb
-  hash: b790d56135725193fc38216d4c6017003209d23e4250147882f075b5622e5e06
-- package: libgl1-mesa-glx
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_amd64.deb
-  hash: de91fad0ffb35ba497ec146ccfa261df79dced33ffc6f9e229435dadeac49e64
-- package: libglapi-mesa
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_amd64.deb
-  hash: 8f77452524501072c09676bd1acf4b71d864d7d2a18fa8158aa5a5cb0bc3ade3
-- package: libx11-6
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_amd64.deb
-  hash: 380aa38372e949f74b57e962146626aae847850ed4f1fcb83784086f239d50c3
-- package: libx11-dev
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_amd64.deb
-  hash: cd141e5c95d7b5f05df08a8e66abbbdb9a2a7213f9f4354b862925fac6106334
-- package: libxcursor-dev
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_amd64.deb
-  hash: 101d83f1368cef54594100b849843df0d1952b0155b707f2256914d4e2d9debc
-- package: libxcursor1
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_amd64.deb
-  hash: 31c05ccd419d5c255643e3d21c871204e154a06af25300c2bd2b721989d038f0
-- package: libxinerama-dev
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_amd64.deb
-  hash: 0e2504bbe3501aae376691e2519336533309c8a97715f8a2b060cdcd6abce15f
-- package: libxinerama1
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_amd64.deb
-  hash: 3668c1178ac649879338192759e79879e0f5797764b448dcac6aed4b24ef495b
-- package: libxrandr-dev
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_amd64.deb
-  hash: d64ac2abe410fe6e25c6de2b90fd2a65dbfdf027c117a574714a0a60c019738f
-- package: libxrandr2
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_amd64.deb
-  hash: e59996ac0e993331799aa7bc768f7edd7b0baec0fafdbeebeef658834ba96b63
-- package: libxrender-dev
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_amd64.deb
-  hash: d17bd9a32eaecdd75d465d38bfc6318aa00e92fa5289ed36a8853f94feb18cbe
-- package: libxrender1
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_amd64.deb
-  hash: 8980934c84c0ebbca4158023d91ced3ddbfa028a2be25959ff4566b37eceb8f4
-- package: linux-libc-dev
-  version: 3.16.51-3
-  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_amd64.deb
-  hash: 8cdc63378b6dfe8995f40cd6f04701e89dbca588e9a9c6fbbe524d1db4cb4f08
-- package: mesa-common-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_amd64.deb
-  hash: 6e617bfdbe9b87a82981b33d2be0963d3cba28160565658420859d84d07ef7a0
-- package: x11proto-core-dev
-  version: 7.0.26-1
-  filename: pool/main/x/x11proto-core/x11proto-core-dev_7.0.26-1_all.deb
-  hash: 9d60c962746bf2d1b1eb69e872a57eb21e13b341329ca592fd8eca527bab1df6
-- package: x11proto-gl-dev
-  version: 1.4.17-1
-  filename: pool/main/x/x11proto-gl/x11proto-gl-dev_1.4.17-1_all.deb
-  hash: 6ce92444e2fda684d5071667adb776152291f940696e547d73022d5ed66d3f10
-- package: x11proto-input-dev
-  version: 2.3.1-1
-  filename: pool/main/x/x11proto-input/x11proto-input-dev_2.3.1-1_all.deb
-  hash: a61a10b34cb0ffac6a2603971be1afd4908ed2830b6a1c554e74ac3321bb1e35
-- package: x11proto-kb-dev
-  version: 1.0.6-2
-  filename: pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-  hash: b7ff8eceb9f05eb470700807c73fdae88f5f9f8b8fbef869029882264dbebd81
-- package: x11proto-randr-dev
-  version: 1.4.0-2
-  filename: pool/main/x/x11proto-randr/x11proto-randr-dev_1.4.0-2_all.deb
-  hash: 3d49d2e205da5d2ca4cdca8d5782e47da5c11ad762c046ffb6173beb5f0d837e
-- package: x11proto-render-dev
-  version: 2:0.11.1-2
-  filename: pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-  hash: 606d63fab57421afe305e4866edb1948e4f9090409d6f63199838ac269d8cfba
diff --git a/cmd/debroot/packages-arm64.lock b/cmd/debroot/packages-arm64.lock
deleted file mode 100644
index 2ff0c39..0000000
--- a/cmd/debroot/packages-arm64.lock
+++ /dev/null
@@ -1,103 +0,0 @@
-hash: e9094f4da079be2e4dd5f427055cf9fffbbaa8848dde1dd53509b417cdeff0b1
-updated: 2019-01-17T20:02:48.614734266-08:00
-packages:
-- package: libc6
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_arm64.deb
-  hash: b52eab4f1beeb020e20fb44bc2dc02a9ccf12fc70213d6a56921e08308bc3e9c
-- package: libc6-dev
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_arm64.deb
-  hash: 9cf8ae92bb508873e19b43975b5841166fc2476664d9de52eb62ae3a1a50abb3
-- package: libgcc-4.9-dev
-  version: 4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc-4.9-dev_4.9.2-10+deb8u1_arm64.deb
-  hash: 5141491d88ffd8288e86efb54cbfa40dbaf7e23ff11ace44261a798c78220f2e
-- package: libgcc1
-  version: 1:4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc1_4.9.2-10+deb8u1_arm64.deb
-  hash: 7585b1dc42b3958fefe1cc40754fb2d25f6d8ce5e4fa14a61b053310d6793594
-- package: libgl1-mesa-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_arm64.deb
-  hash: b363bbe43937a7f23a868e64b278e29f3f45b7608cdc41f295f6088b566b045c
-- package: libgl1-mesa-glx
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_arm64.deb
-  hash: e22ec22e5a46920c6340ea3224a43ec677f728d368fe34421d51d304046a62a0
-- package: libglapi-mesa
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_arm64.deb
-  hash: 24007141988b34aab55abf03a606ea590ac71d62e6cd0aac015427cfab6c0df4
-- package: libx11-6
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_arm64.deb
-  hash: 20ce433137bd35b1f131dadf8dd0f4bedfeac804ae875d495d572b52b9f238cd
-- package: libx11-dev
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_arm64.deb
-  hash: fb9e44a7520dd7cc9ec911954fc4896c31aff683c56a8fbf64867b1e184dd7f2
-- package: libxcursor-dev
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_arm64.deb
-  hash: 5c5125291e5258deac4442fe363c7da162329125e46e9d18add6efee5a6a7ba3
-- package: libxcursor1
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_arm64.deb
-  hash: ce62dcf433498d25f2534213f48184e08ca72abe11454041cf96d845bc32d062
-- package: libxinerama-dev
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_arm64.deb
-  hash: 9094a4298c357455ea4a4094ecdf93a85a1ab404630e35da1dedad5b08e30f27
-- package: libxinerama1
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_arm64.deb
-  hash: e573c84cb609a8799db03b19f1529153048d9e04307e8721fa4f0b516cb47171
-- package: libxrandr-dev
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_arm64.deb
-  hash: d1c1c132da1d809acc8e3b11f173c5a28ba28e76d70dd81123cbf41c6fbb90eb
-- package: libxrandr2
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_arm64.deb
-  hash: 713b2b8a05bc05dc61fa158b2fb4f665272d2f60a86f4bcb15722aec3a02c9fd
-- package: libxrender-dev
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_arm64.deb
-  hash: 7149bd62f79f8f0d5ef8981722e3f1e7d3090b037bf850a607c2ca69f66cf2ad
-- package: libxrender1
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_arm64.deb
-  hash: c2607cd67ff2eb60f88b2532e6999d1a3d31c55afa20ac9be431148a76374908
-- package: linux-libc-dev
-  version: 3.16.51-3
-  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_arm64.deb
-  hash: f2e7ab5f0cc3dd03cd7278e5574dc25b744a399f75cb2890c346a064954779dd
-- package: mesa-common-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_arm64.deb
-  hash: f22b5fa98c4e367d1753a18b2feabb9a1c8185abc727357a783567fe523d1e96
-- package: x11proto-core-dev
-  version: 7.0.26-1
-  filename: pool/main/x/x11proto-core/x11proto-core-dev_7.0.26-1_all.deb
-  hash: 9d60c962746bf2d1b1eb69e872a57eb21e13b341329ca592fd8eca527bab1df6
-- package: x11proto-gl-dev
-  version: 1.4.17-1
-  filename: pool/main/x/x11proto-gl/x11proto-gl-dev_1.4.17-1_all.deb
-  hash: 6ce92444e2fda684d5071667adb776152291f940696e547d73022d5ed66d3f10
-- package: x11proto-input-dev
-  version: 2.3.1-1
-  filename: pool/main/x/x11proto-input/x11proto-input-dev_2.3.1-1_all.deb
-  hash: a61a10b34cb0ffac6a2603971be1afd4908ed2830b6a1c554e74ac3321bb1e35
-- package: x11proto-kb-dev
-  version: 1.0.6-2
-  filename: pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-  hash: b7ff8eceb9f05eb470700807c73fdae88f5f9f8b8fbef869029882264dbebd81
-- package: x11proto-randr-dev
-  version: 1.4.0-2
-  filename: pool/main/x/x11proto-randr/x11proto-randr-dev_1.4.0-2_all.deb
-  hash: 3d49d2e205da5d2ca4cdca8d5782e47da5c11ad762c046ffb6173beb5f0d837e
-- package: x11proto-render-dev
-  version: 2:0.11.1-2
-  filename: pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-  hash: 606d63fab57421afe305e4866edb1948e4f9090409d6f63199838ac269d8cfba
diff --git a/cmd/debroot/packages-armhf.lock b/cmd/debroot/packages-armhf.lock
deleted file mode 100644
index bdafdb4..0000000
--- a/cmd/debroot/packages-armhf.lock
+++ /dev/null
@@ -1,103 +0,0 @@
-hash: e9094f4da079be2e4dd5f427055cf9fffbbaa8848dde1dd53509b417cdeff0b1
-updated: 2019-01-17T20:03:31.930926307-08:00
-packages:
-- package: libc6
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_armhf.deb
-  hash: ccfc4a10a1654454ad07ac381d55dc1bfe0787ebbcd87b42ac05402777ce41b5
-- package: libc6-dev
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_armhf.deb
-  hash: b5af7102716127343a82dfdb42e5b9cd9dc28e28fc14653e0db8f9efdd1fe0a9
-- package: libgcc-4.9-dev
-  version: 4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc-4.9-dev_4.9.2-10+deb8u1_armhf.deb
-  hash: d0ad1e86ff7369d4f43a3278975ac93c3373c1537c452f715d7440aff595f0a4
-- package: libgcc1
-  version: 1:4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc1_4.9.2-10+deb8u1_armhf.deb
-  hash: a456c21c4805a3003586a492af1ddd68083de81f75f3da0807732ad44306541c
-- package: libgl1-mesa-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_armhf.deb
-  hash: 81f7f98b50e513b5b21f0265542a5544b2c97a2e8f059c79b4e6208dc5d5e656
-- package: libgl1-mesa-glx
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_armhf.deb
-  hash: f62a51c6968c9b7b0312081816c538cc4ff49c3a799722f06e492bf0e13ca259
-- package: libglapi-mesa
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_armhf.deb
-  hash: 7098825f957f7bcf216f65fbb8e1c3efe6365041103f77a412f0c8c1145de17f
-- package: libx11-6
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_armhf.deb
-  hash: 29b2da94d351278e0682f86b290724998b6aace8dd730a23930feb5ad11662e7
-- package: libx11-dev
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_armhf.deb
-  hash: d5b0c2b3e8939e896da089757151a9f1f202b0e65134ed453b37d465566acd25
-- package: libxcursor-dev
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_armhf.deb
-  hash: 3836920c14f8e9ecd3aabe31b4b3526e135125f3712cba4b4a030a218be1699b
-- package: libxcursor1
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_armhf.deb
-  hash: 87a99212079783b499b402426796d2ceb07e14f1b972e4e73f7e25ec3046fa9a
-- package: libxinerama-dev
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_armhf.deb
-  hash: 49d378db7c271db6b3befc7cc73448177b4515424d17e400b053f199df4b2a77
-- package: libxinerama1
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_armhf.deb
-  hash: 9fcc2234beb0eb4e0ca3a38d93d38655a433551c04b3d73aa06ca020121d5d2f
-- package: libxrandr-dev
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_armhf.deb
-  hash: 712357a9065f49f4174e04ddb49e2e1eac63a168c27ae9737f04a463e309757d
-- package: libxrandr2
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_armhf.deb
-  hash: 9c379b71846de6d3cb35191962caa5f15d0964fdfd277c3f39b56275dbd1566e
-- package: libxrender-dev
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_armhf.deb
-  hash: 031a2ebffde76e4c201f43c1b66a62a1af7c488877e541623fa5ab6b790abb07
-- package: libxrender1
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_armhf.deb
-  hash: 8bb5f345e6603bbdd151619e045637512e9c3dad27bd670983a50c15b4d98fb0
-- package: linux-libc-dev
-  version: 3.16.51-3
-  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_armhf.deb
-  hash: 14bfef400b83e2f3a587dc564b7d13bf72f27f739d6a74d77a9326f83b3d9460
-- package: mesa-common-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_armhf.deb
-  hash: 19d7b6756d27ddca44356cb4cb3fcaee19dd8166cf64e52d0dfe51302ea39a21
-- package: x11proto-core-dev
-  version: 7.0.26-1
-  filename: pool/main/x/x11proto-core/x11proto-core-dev_7.0.26-1_all.deb
-  hash: 9d60c962746bf2d1b1eb69e872a57eb21e13b341329ca592fd8eca527bab1df6
-- package: x11proto-gl-dev
-  version: 1.4.17-1
-  filename: pool/main/x/x11proto-gl/x11proto-gl-dev_1.4.17-1_all.deb
-  hash: 6ce92444e2fda684d5071667adb776152291f940696e547d73022d5ed66d3f10
-- package: x11proto-input-dev
-  version: 2.3.1-1
-  filename: pool/main/x/x11proto-input/x11proto-input-dev_2.3.1-1_all.deb
-  hash: a61a10b34cb0ffac6a2603971be1afd4908ed2830b6a1c554e74ac3321bb1e35
-- package: x11proto-kb-dev
-  version: 1.0.6-2
-  filename: pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-  hash: b7ff8eceb9f05eb470700807c73fdae88f5f9f8b8fbef869029882264dbebd81
-- package: x11proto-randr-dev
-  version: 1.4.0-2
-  filename: pool/main/x/x11proto-randr/x11proto-randr-dev_1.4.0-2_all.deb
-  hash: 3d49d2e205da5d2ca4cdca8d5782e47da5c11ad762c046ffb6173beb5f0d837e
-- package: x11proto-render-dev
-  version: 2:0.11.1-2
-  filename: pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-  hash: 606d63fab57421afe305e4866edb1948e4f9090409d6f63199838ac269d8cfba
diff --git a/cmd/debroot/packages-i386.lock b/cmd/debroot/packages-i386.lock
deleted file mode 100644
index 7028cd1..0000000
--- a/cmd/debroot/packages-i386.lock
+++ /dev/null
@@ -1,103 +0,0 @@
-hash: e9094f4da079be2e4dd5f427055cf9fffbbaa8848dde1dd53509b417cdeff0b1
-updated: 2019-01-17T20:03:04.992517835-08:00
-packages:
-- package: libc6
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_i386.deb
-  hash: 1d1f82f905386ff6a1dab08ec69b3b1d8bddbfd7c41b68e295e0a204232ad1ae
-- package: libc6-dev
-  version: 2.19-18+deb8u10
-  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_i386.deb
-  hash: 287ea40a96c4eafb94843169f6bf802335182b68f78a1b4bab95851c3385866d
-- package: libgcc-4.9-dev
-  version: 4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc-4.9-dev_4.9.2-10+deb8u1_i386.deb
-  hash: 26dea9f1b54c86dba2059a9b1416cc8f45de75b2f7a26f3fdc52cb82d37e45a0
-- package: libgcc1
-  version: 1:4.9.2-10+deb8u1
-  filename: pool/main/g/gcc-4.9/libgcc1_4.9.2-10+deb8u1_i386.deb
-  hash: 8d6f382ac18f77f2be38ab210428d6fba598fc3d5c197572f665330d79b4f27f
-- package: libgl1-mesa-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_i386.deb
-  hash: 754a9968ea861842a289fa34ca68123723170eb308bd5c64cc7cdb69a939fdbd
-- package: libgl1-mesa-glx
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_i386.deb
-  hash: 11aee5275de4a92d297a785f79ffc1696db99e2761af63355aa7ebe34139ecaa
-- package: libglapi-mesa
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_i386.deb
-  hash: 3b39319fbb66afcf17ba1e6bef9c5583eb873cbd14621821143babb0f855529e
-- package: libx11-6
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_i386.deb
-  hash: 7f55cb1a60fdd6a02bda2c00d6a438f836404681d0e7a8ce7c93cee1545ef7ca
-- package: libx11-dev
-  version: 2:1.6.2-3+deb8u1
-  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_i386.deb
-  hash: 82fd52f4db77855cbf76f274550ff07d2a4bfe62a9c9d10e0345e7c8dece4188
-- package: libxcursor-dev
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_i386.deb
-  hash: 61a4618472acb9cd464c1f42b304d5250cf0fe71212682453031f7fde172d799
-- package: libxcursor1
-  version: 1:1.1.14-1+deb8u1
-  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_i386.deb
-  hash: 771530e98891da87de8c15156d2a2d06ab293086a35f5167f9116548f41900c4
-- package: libxinerama-dev
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_i386.deb
-  hash: 490439d9ebff2e4bc324e5d418d4d9a245a223b5d211de3189cabd78ff7b47d7
-- package: libxinerama1
-  version: 2:1.1.3-1+b1
-  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_i386.deb
-  hash: a1f29a26a81405df89d2ddf64990d9e32d7b642130334db66f063d78c5574633
-- package: libxrandr-dev
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_i386.deb
-  hash: 727435c3854fec93401eb2421842a5749cc113797799dccfa246d6f9b2f22f84
-- package: libxrandr2
-  version: 2:1.4.2-1+deb8u1
-  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_i386.deb
-  hash: c14134e213a1020e4848f927612377bce319a6a4640b5d572009cb8929b0142a
-- package: libxrender-dev
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_i386.deb
-  hash: e399b94ab1c07f7f1d8e72a43630f9e83ae439a279d81a51c9cd82848b986355
-- package: libxrender1
-  version: 1:0.9.8-1+b1
-  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_i386.deb
-  hash: df3f4d61be300203ffde82c829e2bb0a72eceb4991161f419dc5a7ec061d92f9
-- package: linux-libc-dev
-  version: 3.16.51-3
-  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_i386.deb
-  hash: 35def1939fccfd26335d000528a0053e6092a488abce9bbb47d94eb161115d1b
-- package: mesa-common-dev
-  version: 10.3.2-1+deb8u1
-  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_i386.deb
-  hash: 9d2de0e90cca097d380da9e5bd1fdfc34f15b71ba8da5de1289a930b79de5ac9
-- package: x11proto-core-dev
-  version: 7.0.26-1
-  filename: pool/main/x/x11proto-core/x11proto-core-dev_7.0.26-1_all.deb
-  hash: 9d60c962746bf2d1b1eb69e872a57eb21e13b341329ca592fd8eca527bab1df6
-- package: x11proto-gl-dev
-  version: 1.4.17-1
-  filename: pool/main/x/x11proto-gl/x11proto-gl-dev_1.4.17-1_all.deb
-  hash: 6ce92444e2fda684d5071667adb776152291f940696e547d73022d5ed66d3f10
-- package: x11proto-input-dev
-  version: 2.3.1-1
-  filename: pool/main/x/x11proto-input/x11proto-input-dev_2.3.1-1_all.deb
-  hash: a61a10b34cb0ffac6a2603971be1afd4908ed2830b6a1c554e74ac3321bb1e35
-- package: x11proto-kb-dev
-  version: 1.0.6-2
-  filename: pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-  hash: b7ff8eceb9f05eb470700807c73fdae88f5f9f8b8fbef869029882264dbebd81
-- package: x11proto-randr-dev
-  version: 1.4.0-2
-  filename: pool/main/x/x11proto-randr/x11proto-randr-dev_1.4.0-2_all.deb
-  hash: 3d49d2e205da5d2ca4cdca8d5782e47da5c11ad762c046ffb6173beb5f0d837e
-- package: x11proto-render-dev
-  version: 2:0.11.1-2
-  filename: pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-  hash: 606d63fab57421afe305e4866edb1948e4f9090409d6f63199838ac269d8cfba
diff --git a/cmd/debroot/packages.lock b/cmd/debroot/packages.lock
new file mode 100644
index 0000000..d924f6d
--- /dev/null
+++ b/cmd/debroot/packages.lock
@@ -0,0 +1,331 @@
+hash: dd3d21ac782de290fe764593ef476bbf45c3a6ad0ba1838a7e837928194c1c73
+updated: 2019-07-14T20:14:55.925676405-07:00
+packages:
+- package: libc6
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_amd64.deb
+  hash: 0a95ee1c5bff7f73c1279b2b78f32d40da9025a76f93cb67c03f2867a7133e61
+- package: libc6
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_arm64.deb
+  hash: b52eab4f1beeb020e20fb44bc2dc02a9ccf12fc70213d6a56921e08308bc3e9c
+- package: libc6
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_armhf.deb
+  hash: ccfc4a10a1654454ad07ac381d55dc1bfe0787ebbcd87b42ac05402777ce41b5
+- package: libc6
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6_2.19-18+deb8u10_i386.deb
+  hash: 1d1f82f905386ff6a1dab08ec69b3b1d8bddbfd7c41b68e295e0a204232ad1ae
+- package: libc6-dev
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_amd64.deb
+  hash: 00ba98ce8879bdfde13eac699da718d3aaba904ea6a88d5e21e77d1e298d65eb
+- package: libc6-dev
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_arm64.deb
+  hash: 9cf8ae92bb508873e19b43975b5841166fc2476664d9de52eb62ae3a1a50abb3
+- package: libc6-dev
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_armhf.deb
+  hash: b5af7102716127343a82dfdb42e5b9cd9dc28e28fc14653e0db8f9efdd1fe0a9
+- package: libc6-dev
+  version: 2.19-18+deb8u10
+  filename: pool/main/g/glibc/libc6-dev_2.19-18+deb8u10_i386.deb
+  hash: 287ea40a96c4eafb94843169f6bf802335182b68f78a1b4bab95851c3385866d
+- package: libgl1-mesa-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_amd64.deb
+  hash: b790d56135725193fc38216d4c6017003209d23e4250147882f075b5622e5e06
+- package: libgl1-mesa-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_arm64.deb
+  hash: b363bbe43937a7f23a868e64b278e29f3f45b7608cdc41f295f6088b566b045c
+- package: libgl1-mesa-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_armhf.deb
+  hash: 81f7f98b50e513b5b21f0265542a5544b2c97a2e8f059c79b4e6208dc5d5e656
+- package: libgl1-mesa-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-dev_10.3.2-1+deb8u1_i386.deb
+  hash: 754a9968ea861842a289fa34ca68123723170eb308bd5c64cc7cdb69a939fdbd
+- package: libgl1-mesa-glx
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_amd64.deb
+  hash: de91fad0ffb35ba497ec146ccfa261df79dced33ffc6f9e229435dadeac49e64
+- package: libgl1-mesa-glx
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_arm64.deb
+  hash: e22ec22e5a46920c6340ea3224a43ec677f728d368fe34421d51d304046a62a0
+- package: libgl1-mesa-glx
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_armhf.deb
+  hash: f62a51c6968c9b7b0312081816c538cc4ff49c3a799722f06e492bf0e13ca259
+- package: libgl1-mesa-glx
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_i386.deb
+  hash: 11aee5275de4a92d297a785f79ffc1696db99e2761af63355aa7ebe34139ecaa
+- package: libglapi-mesa
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_amd64.deb
+  hash: 8f77452524501072c09676bd1acf4b71d864d7d2a18fa8158aa5a5cb0bc3ade3
+- package: libglapi-mesa
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_arm64.deb
+  hash: 24007141988b34aab55abf03a606ea590ac71d62e6cd0aac015427cfab6c0df4
+- package: libglapi-mesa
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_armhf.deb
+  hash: 7098825f957f7bcf216f65fbb8e1c3efe6365041103f77a412f0c8c1145de17f
+- package: libglapi-mesa
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/libglapi-mesa_10.3.2-1+deb8u1_i386.deb
+  hash: 3b39319fbb66afcf17ba1e6bef9c5583eb873cbd14621821143babb0f855529e
+- package: libx11-6
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_amd64.deb
+  hash: 380aa38372e949f74b57e962146626aae847850ed4f1fcb83784086f239d50c3
+- package: libx11-6
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_arm64.deb
+  hash: 20ce433137bd35b1f131dadf8dd0f4bedfeac804ae875d495d572b52b9f238cd
+- package: libx11-6
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_armhf.deb
+  hash: 29b2da94d351278e0682f86b290724998b6aace8dd730a23930feb5ad11662e7
+- package: libx11-6
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-6_1.6.2-3+deb8u1_i386.deb
+  hash: 7f55cb1a60fdd6a02bda2c00d6a438f836404681d0e7a8ce7c93cee1545ef7ca
+- package: libx11-dev
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_amd64.deb
+  hash: cd141e5c95d7b5f05df08a8e66abbbdb9a2a7213f9f4354b862925fac6106334
+- package: libx11-dev
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_arm64.deb
+  hash: fb9e44a7520dd7cc9ec911954fc4896c31aff683c56a8fbf64867b1e184dd7f2
+- package: libx11-dev
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_armhf.deb
+  hash: d5b0c2b3e8939e896da089757151a9f1f202b0e65134ed453b37d465566acd25
+- package: libx11-dev
+  version: 2:1.6.2-3+deb8u1
+  filename: pool/main/libx/libx11/libx11-dev_1.6.2-3+deb8u1_i386.deb
+  hash: 82fd52f4db77855cbf76f274550ff07d2a4bfe62a9c9d10e0345e7c8dece4188
+- package: libxcursor-dev
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_amd64.deb
+  hash: 101d83f1368cef54594100b849843df0d1952b0155b707f2256914d4e2d9debc
+- package: libxcursor-dev
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_arm64.deb
+  hash: 5c5125291e5258deac4442fe363c7da162329125e46e9d18add6efee5a6a7ba3
+- package: libxcursor-dev
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_armhf.deb
+  hash: 3836920c14f8e9ecd3aabe31b4b3526e135125f3712cba4b4a030a218be1699b
+- package: libxcursor-dev
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor-dev_1.1.14-1+deb8u1_i386.deb
+  hash: 61a4618472acb9cd464c1f42b304d5250cf0fe71212682453031f7fde172d799
+- package: libxcursor1
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_amd64.deb
+  hash: 31c05ccd419d5c255643e3d21c871204e154a06af25300c2bd2b721989d038f0
+- package: libxcursor1
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_arm64.deb
+  hash: ce62dcf433498d25f2534213f48184e08ca72abe11454041cf96d845bc32d062
+- package: libxcursor1
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_armhf.deb
+  hash: 87a99212079783b499b402426796d2ceb07e14f1b972e4e73f7e25ec3046fa9a
+- package: libxcursor1
+  version: 1:1.1.14-1+deb8u1
+  filename: pool/main/libx/libxcursor/libxcursor1_1.1.14-1+deb8u1_i386.deb
+  hash: 771530e98891da87de8c15156d2a2d06ab293086a35f5167f9116548f41900c4
+- package: libxi-dev
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi-dev_1.7.4-1+deb8u1_amd64.deb
+  hash: 77dd8c34c69d86dec841028c0fca646544cea079ee95643db3fdc15cbdf9d8bf
+- package: libxi-dev
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi-dev_1.7.4-1+deb8u1_arm64.deb
+  hash: 5aee0969b1792e41ab7e3b4dfe0bd1e2657cb32fe3e880a25bf87a3a645f9cdc
+- package: libxi-dev
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi-dev_1.7.4-1+deb8u1_armhf.deb
+  hash: de4bb8afb8f2fc3e083cc89e39aa839b7af3c40ab312bb1ac7342bdfb2f605f2
+- package: libxi-dev
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi-dev_1.7.4-1+deb8u1_i386.deb
+  hash: 4ed707f9a73f7381fe7e16c4f4099f47b025700465dfada8aa7c8678f4e8a657
+- package: libxi6
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi6_1.7.4-1+deb8u1_amd64.deb
+  hash: a99de627a07f54bc40e5dc77e3ca7e9d9b5619e068f1bb303f86edd138d6d037
+- package: libxi6
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi6_1.7.4-1+deb8u1_arm64.deb
+  hash: fddbfdce740bd5a74cb34d69d10d0e42a9abff78cd89e7119cdf21a8e3dd5d3a
+- package: libxi6
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi6_1.7.4-1+deb8u1_armhf.deb
+  hash: 79c53ea34b9a7c239a75aac28386ca2614f7add0be3578ca4710705ba3e0bd66
+- package: libxi6
+  version: 2:1.7.4-1+deb8u1
+  filename: pool/main/libx/libxi/libxi6_1.7.4-1+deb8u1_i386.deb
+  hash: d6f5e16a2ea39f045273b8ab1ac64436ce6df0b21fb77f3839d298ebdac297e5
+- package: libxinerama-dev
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_amd64.deb
+  hash: 0e2504bbe3501aae376691e2519336533309c8a97715f8a2b060cdcd6abce15f
+- package: libxinerama-dev
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_arm64.deb
+  hash: 9094a4298c357455ea4a4094ecdf93a85a1ab404630e35da1dedad5b08e30f27
+- package: libxinerama-dev
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_armhf.deb
+  hash: 49d378db7c271db6b3befc7cc73448177b4515424d17e400b053f199df4b2a77
+- package: libxinerama-dev
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b1_i386.deb
+  hash: 490439d9ebff2e4bc324e5d418d4d9a245a223b5d211de3189cabd78ff7b47d7
+- package: libxinerama1
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_amd64.deb
+  hash: 3668c1178ac649879338192759e79879e0f5797764b448dcac6aed4b24ef495b
+- package: libxinerama1
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_arm64.deb
+  hash: e573c84cb609a8799db03b19f1529153048d9e04307e8721fa4f0b516cb47171
+- package: libxinerama1
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_armhf.deb
+  hash: 9fcc2234beb0eb4e0ca3a38d93d38655a433551c04b3d73aa06ca020121d5d2f
+- package: libxinerama1
+  version: 2:1.1.3-1+b1
+  filename: pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b1_i386.deb
+  hash: a1f29a26a81405df89d2ddf64990d9e32d7b642130334db66f063d78c5574633
+- package: libxrandr-dev
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_amd64.deb
+  hash: d64ac2abe410fe6e25c6de2b90fd2a65dbfdf027c117a574714a0a60c019738f
+- package: libxrandr-dev
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_arm64.deb
+  hash: d1c1c132da1d809acc8e3b11f173c5a28ba28e76d70dd81123cbf41c6fbb90eb
+- package: libxrandr-dev
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_armhf.deb
+  hash: 712357a9065f49f4174e04ddb49e2e1eac63a168c27ae9737f04a463e309757d
+- package: libxrandr-dev
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr-dev_1.4.2-1+deb8u1_i386.deb
+  hash: 727435c3854fec93401eb2421842a5749cc113797799dccfa246d6f9b2f22f84
+- package: libxrandr2
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_amd64.deb
+  hash: e59996ac0e993331799aa7bc768f7edd7b0baec0fafdbeebeef658834ba96b63
+- package: libxrandr2
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_arm64.deb
+  hash: 713b2b8a05bc05dc61fa158b2fb4f665272d2f60a86f4bcb15722aec3a02c9fd
+- package: libxrandr2
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_armhf.deb
+  hash: 9c379b71846de6d3cb35191962caa5f15d0964fdfd277c3f39b56275dbd1566e
+- package: libxrandr2
+  version: 2:1.4.2-1+deb8u1
+  filename: pool/main/libx/libxrandr/libxrandr2_1.4.2-1+deb8u1_i386.deb
+  hash: c14134e213a1020e4848f927612377bce319a6a4640b5d572009cb8929b0142a
+- package: libxrender-dev
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_amd64.deb
+  hash: d17bd9a32eaecdd75d465d38bfc6318aa00e92fa5289ed36a8853f94feb18cbe
+- package: libxrender-dev
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_arm64.deb
+  hash: 7149bd62f79f8f0d5ef8981722e3f1e7d3090b037bf850a607c2ca69f66cf2ad
+- package: libxrender-dev
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_armhf.deb
+  hash: 031a2ebffde76e4c201f43c1b66a62a1af7c488877e541623fa5ab6b790abb07
+- package: libxrender-dev
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender-dev_0.9.8-1+b1_i386.deb
+  hash: e399b94ab1c07f7f1d8e72a43630f9e83ae439a279d81a51c9cd82848b986355
+- package: libxrender1
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_amd64.deb
+  hash: 8980934c84c0ebbca4158023d91ced3ddbfa028a2be25959ff4566b37eceb8f4
+- package: libxrender1
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_arm64.deb
+  hash: c2607cd67ff2eb60f88b2532e6999d1a3d31c55afa20ac9be431148a76374908
+- package: libxrender1
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_armhf.deb
+  hash: 8bb5f345e6603bbdd151619e045637512e9c3dad27bd670983a50c15b4d98fb0
+- package: libxrender1
+  version: 1:0.9.8-1+b1
+  filename: pool/main/libx/libxrender/libxrender1_0.9.8-1+b1_i386.deb
+  hash: df3f4d61be300203ffde82c829e2bb0a72eceb4991161f419dc5a7ec061d92f9
+- package: linux-libc-dev
+  version: 3.16.51-3
+  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_amd64.deb
+  hash: 8cdc63378b6dfe8995f40cd6f04701e89dbca588e9a9c6fbbe524d1db4cb4f08
+- package: linux-libc-dev
+  version: 3.16.51-3
+  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_arm64.deb
+  hash: f2e7ab5f0cc3dd03cd7278e5574dc25b744a399f75cb2890c346a064954779dd
+- package: linux-libc-dev
+  version: 3.16.51-3
+  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_armhf.deb
+  hash: 14bfef400b83e2f3a587dc564b7d13bf72f27f739d6a74d77a9326f83b3d9460
+- package: linux-libc-dev
+  version: 3.16.51-3
+  filename: pool/main/l/linux/linux-libc-dev_3.16.51-3_i386.deb
+  hash: 35def1939fccfd26335d000528a0053e6092a488abce9bbb47d94eb161115d1b
+- package: mesa-common-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_amd64.deb
+  hash: 6e617bfdbe9b87a82981b33d2be0963d3cba28160565658420859d84d07ef7a0
+- package: mesa-common-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_arm64.deb
+  hash: f22b5fa98c4e367d1753a18b2feabb9a1c8185abc727357a783567fe523d1e96
+- package: mesa-common-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_armhf.deb
+  hash: 19d7b6756d27ddca44356cb4cb3fcaee19dd8166cf64e52d0dfe51302ea39a21
+- package: mesa-common-dev
+  version: 10.3.2-1+deb8u1
+  filename: pool/main/m/mesa/mesa-common-dev_10.3.2-1+deb8u1_i386.deb
+  hash: 9d2de0e90cca097d380da9e5bd1fdfc34f15b71ba8da5de1289a930b79de5ac9
+- package: x11proto-core-dev
+  version: 7.0.26-1
+  filename: pool/main/x/x11proto-core/x11proto-core-dev_7.0.26-1_all.deb
+  hash: 9d60c962746bf2d1b1eb69e872a57eb21e13b341329ca592fd8eca527bab1df6
+- package: x11proto-gl-dev
+  version: 1.4.17-1
+  filename: pool/main/x/x11proto-gl/x11proto-gl-dev_1.4.17-1_all.deb
+  hash: 6ce92444e2fda684d5071667adb776152291f940696e547d73022d5ed66d3f10
+- package: x11proto-input-dev
+  version: 2.3.1-1
+  filename: pool/main/x/x11proto-input/x11proto-input-dev_2.3.1-1_all.deb
+  hash: a61a10b34cb0ffac6a2603971be1afd4908ed2830b6a1c554e74ac3321bb1e35
+- package: x11proto-kb-dev
+  version: 1.0.6-2
+  filename: pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
+  hash: b7ff8eceb9f05eb470700807c73fdae88f5f9f8b8fbef869029882264dbebd81
+- package: x11proto-randr-dev
+  version: 1.4.0-2
+  filename: pool/main/x/x11proto-randr/x11proto-randr-dev_1.4.0-2_all.deb
+  hash: 3d49d2e205da5d2ca4cdca8d5782e47da5c11ad762c046ffb6173beb5f0d837e
+- package: x11proto-render-dev
+  version: 2:0.11.1-2
+  filename: pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+  hash: 606d63fab57421afe305e4866edb1948e4f9090409d6f63199838ac269d8cfba
diff --git a/cmd/debroot/packages.yml b/cmd/debroot/packages.yml
index 639a8de..e02120c 100644
--- a/cmd/debroot/packages.yml
+++ b/cmd/debroot/packages.yml
@@ -1,14 +1,17 @@
 dists:
   - jessie
   - jessie-updates
+architectures:
+  - amd64
+  - arm64
+  - armhf
+  - i386
 components:
   - main
 keyring: debian-archive-keyring.gpg
 packages:
   - package: libc6
   - package: libc6-dev
-  - package: libgcc-4.9-dev
-  - package: libgcc1
   - package: libgl1-mesa-dev
   - package: libgl1-mesa-glx
   - package: libglapi-mesa
@@ -16,6 +19,8 @@
   - package: libx11-dev
   - package: libxcursor1
   - package: libxcursor-dev
+  - package: libxi6
+  - package: libxi-dev
   - package: libxrandr2
   - package: libxrandr-dev
   - package: libxrender1