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
}