Initial operating system work

Adds a draft for most of the operating system work, sans external things like EDK2 and kernel build which will be pushed later in a separate diff.

* Sealing/Unsealing of encrypted and integrity-protected data partition using TPM2
* PID1 standard behaviour (mounting minimal filesystems, cleaning up orphans)
* TPM2.0 helper library
* Block device finding and mounting

Test Plan: Manually tested, CI will be dealt with later.

X-Origin-Diff: phab/D157
GitOrigin-RevId: 6fc494f50cab1f081c3d352677158c009f4d7990
diff --git a/pkg/devicemapper/devicemapper.go b/pkg/devicemapper/devicemapper.go
index ef101de..dec6260 100644
--- a/pkg/devicemapper/devicemapper.go
+++ b/pkg/devicemapper/devicemapper.go
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package main
+package devicemapper
 
 import (
 	"bytes"
@@ -138,7 +138,16 @@
 func getFd() (uintptr, error) {
 	if fd == 0 {
 		f, err := os.Open("/dev/mapper/control")
-		if err != nil {
+		if os.IsNotExist(err) {
+			os.MkdirAll("/dev/mapper", 0755)
+			if err := unix.Mknod("/dev/mapper/control", unix.S_IFCHR|0600, int(unix.Mkdev(10, 236))); err != nil {
+				return 0, err
+			}
+			f, err = os.Open("/dev/mapper/control")
+			if err != nil {
+				return 0, err
+			}
+		} else if err != nil {
 			return 0, err
 		}
 		fd = f.Fd()
@@ -271,15 +280,15 @@
 func CreateActiveDevice(name string, targets []Target) (uint64, error) {
 	dev, err := CreateDevice(name)
 	if err != nil {
-		return 0, errors.Wrap(err, "DM_DEV_CREATE failed")
+		return 0, fmt.Errorf("DM_DEV_CREATE failed: %w", err)
 	}
 	if err := LoadTable(name, targets); err != nil {
 		RemoveDevice(name)
-		return 0, errors.Wrap(err, "DM_TABLE_LOAD failed")
+		return 0, fmt.Errorf("DM_TABLE_LOAD failed: %w", err)
 	}
 	if err := Resume(name); err != nil {
 		RemoveDevice(name)
-		return 0, errors.Wrap(err, "DM_DEV_SUSPEND failed")
+		return 0, fmt.Errorf("DM_DEV_SUSPEND failed: %w", err)
 	}
 	return dev, nil
 }