makespec revision 1.2
11.1Schristos#!/bin/sh 21.1Schristos# 31.1Schristos# Copyright (c) 2024 The NetBSD Foundation, Inc. 41.1Schristos# All rights reserved. 51.1Schristos# 61.1Schristos# This code is derived from software contributed to The NetBSD Foundation 71.1Schristos# by Christos Zoulas. 81.1Schristos# 91.1Schristos# Redistribution and use in source and binary forms, with or without 101.1Schristos# modification, are permitted provided that the following conditions 111.1Schristos# are met: 121.1Schristos# 1. Redistributions of source code must retain the above copyright 131.1Schristos# notice, this list of conditions and the following disclaimer. 141.1Schristos# 2. Redistributions in binary form must reproduce the above copyright 151.1Schristos# notice, this list of conditions and the following disclaimer in the 161.1Schristos# documentation and/or other materials provided with the distribution. 171.1Schristos# 181.1Schristos# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 191.1Schristos# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 201.1Schristos# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 211.1Schristos# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 221.1Schristos# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 231.1Schristos# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 241.1Schristos# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 251.1Schristos# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 261.1Schristos# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 271.1Schristos# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 281.1Schristos# POSSIBILITY OF SUCH DAMAGE. 291.1Schristos# 301.1Schristos# Create an mtree spec file with per file type defaults 311.1Schristos 321.1SchristosTYPES="b c d f l p s" 331.1Schristos 341.1Schristosgetmode() { 351.1Schristos case $1 in 361.1Schristos b|c) echo 0600;; 371.1Schristos d) echo 0755;; 381.1Schristos f) echo 0644;; 391.1Schristos l) echo 0777;; 401.1Schristos p|s) echo 0666;; 411.1Schristos *) echo "*error $1*";; 421.1Schristos esac 431.1Schristos} 441.1Schristos 451.1Schristosgettype() { 461.1Schristos case $1 in 471.1Schristos b) echo block;; 481.1Schristos c) echo char;; 491.1Schristos d) echo dir;; 501.1Schristos f) echo file;; 511.1Schristos l) echo link;; 521.1Schristos p) echo fifo;; 531.1Schristos s) echo socket;; 541.1Schristos *) echo "*error $1*";; 551.1Schristos esac 561.1Schristos} 571.1Schristos 581.2Schristosusage() { 591.2Schristos echo "Usage: $0 -d <base> <dir>..." 1>&2 601.1Schristos exit 1 611.2Schristos} 621.2Schristos 631.2Schristos 641.2Schristoswhile getopts "d:" i; do 651.2Schristos case $i in 661.2Schristos d) 671.2Schristos DIR="$OPTARG";; 681.2Schristos *) 691.2Schristos usage;; 701.2Schristos esac 711.2Schristosdone 721.2Schristos 731.2Schristosshift $((OPTIND - 1)) 741.2Schristos 751.2Schristosif [ -z "$DIR" ] || [ -z "$1" ]; then 761.2Schristos usage 771.1Schristosfi 781.1Schristos 791.2Schristoscd "$DIR" 801.2Schristos 811.2Schristosfor d; do 821.2Schristos case $d in 831.2Schristos .);; 841.2Schristos *) d="./$d";; 851.2Schristos esac 861.2Schristos for i in $TYPES; do 871.1Schristos 881.2Schristos t=$(gettype $i) 891.2Schristos m=$(getmode $i) 901.2Schristos find $d -type $i -exec \ 911.2Schristos printf "%s type=$t uname=root gname=wheel mode=$m\n" {} \; 921.2Schristos done 931.1Schristos 941.1Schristosdone | sort 95