| // Copyright 2020 The Monogon Project Authors. | 
 | // | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //     http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 |  | 
 | syntax = "proto3"; | 
 |  | 
 | package metropolis.node.build.fsspec; | 
 | option go_package = "source.monogon.dev/metropolis/node/build/fsspec"; | 
 |  | 
 | // FSSpec is the spec from which a filesystem is generated. It consists of files, directories and symbolic | 
 | // links. Directories are also automatically inferred when required for the placement of files or symbolic | 
 | // links. Inferred directories always have uid 0, gid 0 and permissions 0555. This can be overridden by | 
 | // explicitly specifying a directory at a given path. | 
 | message FSSpec { | 
 |   repeated File file = 1; | 
 |   repeated Directory directory = 2; | 
 |   repeated SymbolicLink symbolic_link = 3; | 
 |   repeated SpecialFile special_file = 4; | 
 | } | 
 |  | 
 | // For internal use only. Represents all supported inodes in a oneof. | 
 | message Inode { | 
 |   oneof type { | 
 |     File file = 1; | 
 |     Directory directory = 2; | 
 |     SymbolicLink symbolic_link = 3; | 
 |     SpecialFile special_file = 4; | 
 |   } | 
 | } | 
 |  | 
 | message File { | 
 |   // The path where the file ends up in the filesystem. | 
 |   string path = 1; | 
 |   // The path on the host filesystem where the file contents should be taken from. | 
 |   string source_path = 2; | 
 |   // Unix permission bits | 
 |   uint32 mode = 3; | 
 |   // Owner uid | 
 |   uint32 uid = 4; | 
 |   // Owner gid | 
 |   uint32 gid = 5; | 
 | } | 
 |  | 
 | message Directory { | 
 |   // The path where the directory ends up in the filesystem. | 
 |   string path = 1; | 
 |   // Unix permission bits | 
 |   uint32 mode = 2; | 
 |   // Owner uid | 
 |   uint32 uid = 3; | 
 |   // Owner gid | 
 |   uint32 gid = 4; | 
 | } | 
 |  | 
 | message SymbolicLink { | 
 |   // The path where the symbolic link ends up in the filesystem. | 
 |   string path = 1; | 
 |   // The path to which the symbolic link resolves to. | 
 |   string target_path = 2; | 
 | } | 
 |  | 
 | message SpecialFile { | 
 |   // The path where the special file ends up in the filesystem. | 
 |   string path = 1; | 
 |  | 
 |   enum Type { | 
 |     CHARACTER_DEV = 0; | 
 |     BLOCK_DEV = 1; | 
 |     FIFO = 2; | 
 |   } | 
 |  | 
 |   // Type of special file. | 
 |   Type type = 2; | 
 |  | 
 |   // The major device number of the special file. | 
 |   uint32 major = 3; | 
 |   // The minor number of the special file. Ignored for FIFO-type special files. | 
 |   uint32 minor = 4; | 
 |  | 
 |   // Unix permission bits | 
 |   uint32 mode = 5; | 
 |   // Owner uid | 
 |   uint32 uid = 6; | 
 |   // Owner gid | 
 |   uint32 gid = 7; | 
 | } |