Home | History | Annotate | Line # | Download | only in sysinst
defs.h revision 1.42.2.10
      1  1.42.2.10   msaitoh /*	$NetBSD: defs.h,v 1.42.2.10 2022/02/02 04:25:36 msaitoh Exp $	*/
      2        1.1  dholland 
      3        1.1  dholland /*
      4        1.1  dholland  * Copyright 1997 Piermont Information Systems Inc.
      5        1.1  dholland  * All rights reserved.
      6        1.1  dholland  *
      7        1.1  dholland  * Written by Philip A. Nelson for Piermont Information Systems Inc.
      8        1.1  dholland  *
      9        1.1  dholland  * Redistribution and use in source and binary forms, with or without
     10        1.1  dholland  * modification, are permitted provided that the following conditions
     11        1.1  dholland  * are met:
     12        1.1  dholland  * 1. Redistributions of source code must retain the above copyright
     13        1.1  dholland  *    notice, this list of conditions and the following disclaimer.
     14        1.1  dholland  * 2. Redistributions in binary form must reproduce the above copyright
     15        1.1  dholland  *    notice, this list of conditions and the following disclaimer in the
     16        1.1  dholland  *    documentation and/or other materials provided with the distribution.
     17        1.1  dholland  * 3. The name of Piermont Information Systems Inc. may not be used to endorse
     18        1.1  dholland  *    or promote products derived from this software without specific prior
     19        1.1  dholland  *    written permission.
     20        1.1  dholland  *
     21        1.1  dholland  * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
     22        1.1  dholland  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     23        1.1  dholland  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     24        1.1  dholland  * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
     25        1.1  dholland  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     26        1.1  dholland  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     27        1.1  dholland  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     28        1.1  dholland  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     29        1.1  dholland  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     30        1.1  dholland  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     31        1.1  dholland  * THE POSSIBILITY OF SUCH DAMAGE.
     32        1.1  dholland  *
     33        1.1  dholland  */
     34        1.1  dholland 
     35        1.1  dholland #ifndef _DEFS_H_
     36        1.1  dholland #define _DEFS_H_
     37        1.1  dholland 
     38        1.1  dholland /* defs.h -- definitions for use in the sysinst program. */
     39        1.1  dholland 
     40        1.1  dholland /* System includes needed for this. */
     41        1.2    martin #include <sys/queue.h>
     42        1.1  dholland #include <sys/types.h>
     43        1.2    martin #include <sys/disk.h>
     44       1.34    martin #include <uuid.h>
     45        1.1  dholland 
     46       1.34    martin const char *getfslabelname(uint, uint);
     47        1.1  dholland 
     48        1.1  dholland #include "msg_defs.h"
     49        1.1  dholland #include "menu_defs.h"
     50       1.34    martin #include "partitions.h"
     51        1.1  dholland 
     52        1.1  dholland #define min(a,b)	((a) < (b) ? (a) : (b))
     53        1.1  dholland #define max(a,b)	((a) > (b) ? (a) : (b))
     54        1.1  dholland 
     55        1.1  dholland /* constants */
     56       1.34    martin #define MEG (1024UL * 1024UL)
     57       1.34    martin #define GIG (1024UL * MEG)
     58       1.34    martin #define STRSIZE		255
     59       1.34    martin #define	MENUSTRSIZE	80
     60       1.34    martin #define SSTRSIZE	30
     61  1.42.2.10   msaitoh #define	DISKNAMESIZE	24	/* max(strlen("/dev/rsd22c")) */
     62       1.34    martin 
     63   1.42.2.6   msaitoh /* these are used for different alignment defaults */
     64       1.34    martin #define	HUGE_DISK_SIZE	(daddr_t)(128 * (GIG / 512))
     65       1.34    martin #define	TINY_DISK_SIZE	(daddr_t)(1800 * (MEG / 512))
     66       1.34    martin 
     67   1.42.2.6   msaitoh /*
     68   1.42.2.6   msaitoh  * if a system does not have more ram (in MB) than this, swap will be enabled
     69   1.42.2.6   msaitoh  * very early (as soon as the swap partition has been created)
     70   1.42.2.6   msaitoh  */
     71   1.42.2.6   msaitoh #define	TINY_RAM_SIZE		32
     72   1.42.2.6   msaitoh /*
     73   1.42.2.6   msaitoh  * if a system has less ram (in MB) than this, we will not create a
     74   1.42.2.6   msaitoh  * tmpfs /tmp by default (to workaround PR misc/54886)
     75   1.42.2.6   msaitoh  */
     76   1.42.2.8    bouyer #define	SMALL_RAM_SIZE		384
     77   1.42.2.6   msaitoh 
     78       1.34    martin /* helper macros to create unique internal error messages */
     79       1.34    martin #define STR_NO(STR)	#STR
     80       1.34    martin #define	TO_STR(NO)	STR_NO(NO)
     81       1.34    martin #define	INTERNAL_ERROR __FILE__ ":" TO_STR(__LINE__) ": internal error"
     82        1.1  dholland 
     83        1.1  dholland /* For run.c: collect() */
     84        1.1  dholland #define T_FILE		0
     85        1.1  dholland #define T_OUTPUT	1
     86        1.1  dholland 
     87        1.1  dholland /* Some install status/response values */
     88        1.1  dholland #define	SET_OK		0		/* Set extracted */
     89        1.1  dholland #define	SET_RETRY	1		/* Retry */
     90        1.1  dholland #define	SET_SKIP	2		/* Skip this set */
     91        1.1  dholland #define	SET_SKIP_GROUP	3		/* Skip this set and rest of group */
     92        1.1  dholland #define	SET_ABANDON	4		/* Abandon installation */
     93        1.1  dholland #define	SET_CONTINUE	5		/* Continue (copy from floppy loop) */
     94        1.1  dholland 
     95        1.1  dholland /* run_prog flags */
     96        1.1  dholland #define RUN_DISPLAY	0x0001		/* Display program output */
     97        1.1  dholland #define RUN_FATAL	0x0002		/* errors are fatal */
     98        1.1  dholland #define RUN_CHROOT	0x0004		/* chroot to target disk */
     99        1.1  dholland #define RUN_FULLSCREEN	0x0008		/* fullscreen (use with RUN_DISPLAY) */
    100        1.1  dholland #define RUN_SILENT	0x0010		/* Do not show output */
    101        1.1  dholland #define RUN_ERROR_OK	0x0040		/* Don't wait for error confirmation */
    102        1.1  dholland #define RUN_PROGRESS	0x0080		/* Output is just progess test */
    103        1.1  dholland #define RUN_NO_CLEAR	0x0100		/* Leave program output after error */
    104        1.1  dholland #define RUN_XFER_DIR	0x0200		/* cd to xfer_dir in child */
    105        1.1  dholland 
    106        1.2    martin /* for bsddisklabel.c */
    107   1.42.2.8    bouyer enum layout_type {
    108   1.42.2.8    bouyer 	LY_KEEPEXISTING,	/* keep exisiting partitions */
    109   1.42.2.8    bouyer 	LY_OTHERSCHEME,		/* delete all, select new partitioning scheme */
    110   1.42.2.8    bouyer 	LY_SETSIZES,		/* edit sizes */
    111   1.42.2.8    bouyer 	LY_USEDEFAULT,		/* use default sizes */
    112   1.42.2.8    bouyer 	LY_USEFULL,		/* use full disk for NetBSD */
    113   1.42.2.8    bouyer 	LY_ERROR		/* used for "abort" in menu */
    114   1.42.2.8    bouyer };
    115   1.42.2.8    bouyer 
    116       1.34    martin enum setup_type { SY_NEWRAID, SY_NEWCGD, SY_NEWLVM };
    117        1.2    martin 
    118        1.1  dholland /* Installation sets */
    119        1.1  dholland enum {
    120        1.1  dholland     SET_NONE,
    121        1.1  dholland     SET_KERNEL_FIRST,
    122        1.1  dholland     SET_KERNEL_1,	/* Usually GENERIC */
    123        1.1  dholland     SET_KERNEL_2,	/* MD kernel... */
    124        1.1  dholland     SET_KERNEL_3,	/* MD kernel... */
    125        1.1  dholland     SET_KERNEL_4,	/* MD kernel... */
    126        1.1  dholland     SET_KERNEL_5,	/* MD kernel... */
    127        1.1  dholland     SET_KERNEL_6,	/* MD kernel... */
    128        1.1  dholland     SET_KERNEL_7,	/* MD kernel... */
    129        1.1  dholland     SET_KERNEL_8,	/* MD kernel... */
    130        1.1  dholland     SET_KERNEL_9,	/* MD kernel... */
    131        1.1  dholland     SET_KERNEL_LAST,	/* allow 9 kernels */
    132        1.1  dholland 
    133        1.1  dholland     /* System sets */
    134        1.1  dholland     SET_BASE,		/* base */
    135        1.1  dholland     SET_ETC,		/* /etc */
    136        1.1  dholland     SET_COMPILER,	/* compiler tools */
    137        1.1  dholland     SET_GAMES,		/* text games */
    138        1.1  dholland     SET_MAN_PAGES,	/* online manual pages */
    139        1.1  dholland     SET_MISC,		/* miscellaneuous */
    140        1.1  dholland     SET_MODULES,	/* kernel modules */
    141   1.42.2.3    martin     SET_RESCUE,		/* /rescue recovery tools */
    142        1.1  dholland     SET_TESTS,		/* tests */
    143        1.1  dholland     SET_TEXT_TOOLS,	/* text processing tools */
    144        1.1  dholland 
    145        1.1  dholland     /* X11 sets */
    146        1.1  dholland     SET_X11_FIRST,
    147        1.1  dholland     SET_X11_BASE,	/* X11 base and clients */
    148        1.1  dholland     SET_X11_FONTS,	/* X11 fonts */
    149        1.1  dholland     SET_X11_SERVERS,	/* X11 servers */
    150        1.1  dholland     SET_X11_PROG,	/* X11 programming */
    151        1.1  dholland     SET_X11_ETC,	/* X11 config */
    152        1.1  dholland     SET_X11_LAST,
    153        1.1  dholland 
    154        1.1  dholland     /* Machine dependent sets */
    155        1.1  dholland     SET_MD_1,		/* Machine dependent set */
    156        1.1  dholland     SET_MD_2,		/* Machine dependent set */
    157        1.1  dholland     SET_MD_3,		/* Machine dependent set */
    158        1.1  dholland     SET_MD_4,		/* Machine dependent set */
    159        1.1  dholland 
    160        1.1  dholland     /* Source sets */
    161        1.1  dholland     SET_SYSSRC,
    162        1.1  dholland     SET_SRC,
    163        1.1  dholland     SET_SHARESRC,
    164        1.1  dholland     SET_GNUSRC,
    165        1.1  dholland     SET_XSRC,
    166        1.1  dholland 
    167        1.1  dholland     /* Debug sets */
    168        1.1  dholland     SET_DEBUG,
    169        1.1  dholland     SET_X11_DEBUG,
    170        1.1  dholland 
    171        1.1  dholland     SET_LAST,
    172        1.1  dholland     SET_GROUP,		/* Start of submenu */
    173        1.1  dholland     SET_GROUP_END,	/* End of submenu */
    174        1.1  dholland     SET_PKGSRC,		/* pkgsrc, not counted as regular set */
    175        1.1  dholland };
    176        1.1  dholland 
    177        1.1  dholland /* Initialisers to select sets */
    178        1.1  dholland /* All kernels */
    179        1.1  dholland #define SET_KERNEL SET_KERNEL_1, SET_KERNEL_2, SET_KERNEL_3, SET_KERNEL_4, \
    180        1.1  dholland 		    SET_KERNEL_5, SET_KERNEL_6, SET_KERNEL_7, SET_KERNEL_8
    181        1.1  dholland /* Core system sets */
    182        1.1  dholland #define SET_CORE SET_MODULES, SET_BASE, SET_ETC
    183        1.1  dholland /* All system sets */
    184        1.1  dholland #define SET_SYSTEM SET_CORE, SET_COMPILER, SET_GAMES, \
    185   1.42.2.3    martin 		    SET_MAN_PAGES, SET_MISC, SET_RESCUE, \
    186   1.42.2.3    martin 		    SET_TESTS, SET_TEXT_TOOLS
    187        1.1  dholland /* All X11 sets */
    188        1.1  dholland #define SET_X11_NOSERVERS SET_X11_BASE, SET_X11_FONTS, SET_X11_PROG, SET_X11_ETC
    189        1.1  dholland #define SET_X11 SET_X11_NOSERVERS, SET_X11_SERVERS
    190        1.1  dholland 
    191        1.1  dholland /* All machine dependent sets */
    192        1.1  dholland #define SET_MD SET_MD_1, SET_MD_2, SET_MD_3, SET_MD_4
    193        1.1  dholland 
    194        1.1  dholland /* All source sets */
    195        1.1  dholland #define SET_SOURCE SET_SYSSRC, SET_SRC, SET_SHARESRC, SET_GNUSRC, SET_XSRC
    196        1.1  dholland 
    197        1.1  dholland /* All debug sets */
    198        1.1  dholland #define SET_DEBUGGING SET_DEBUG, SET_X11_DEBUG
    199        1.1  dholland 
    200        1.1  dholland /* Set list flags */
    201        1.1  dholland #define SFLAG_MINIMAL	1
    202        1.1  dholland #define	SFLAG_NOX	2
    203        1.1  dholland 
    204        1.1  dholland /* Round up to the next full cylinder size */
    205        1.1  dholland #define NUMSEC(size, sizemult, cylsize) \
    206       1.34    martin 	((sizemult) == 1 ? (size) : \
    207        1.1  dholland 	 roundup((size) * (sizemult), (cylsize)))
    208        1.1  dholland 
    209        1.1  dholland /* What FS type? */
    210       1.34    martin #define PI_ISBSDFS(PI) (PI_FSTYPE(PI) == FS_BSDLFS || \
    211       1.34    martin 		        PI_FSTYPE(PI) == FS_BSDFFS)
    212        1.1  dholland 
    213       1.23    martin /*
    214       1.23    martin  * We do not offer CDs or floppies as installation target usually.
    215       1.23    martin  * Architectures might want to undefine if they want to allow
    216       1.23    martin  * these devices or redefine if they have unusual CD device names.
    217       1.23    martin  * Do not define to empty or an empty string, undefine instead.
    218       1.23    martin  */
    219       1.21    martin #define CD_NAMES "cd*"
    220       1.23    martin #define FLOPPY_NAMES "fd*"
    221        1.1  dholland 
    222        1.1  dholland /* Types */
    223        1.8    martin 
    224        1.8    martin /* pass a void* argument into a menu and also provide a int return value */
    225        1.8    martin typedef struct arg_rv {
    226        1.8    martin 	void *arg;
    227        1.8    martin 	int rv;
    228        1.8    martin } arg_rv;
    229        1.8    martin 
    230       1.34    martin /*
    231       1.34    martin  * A minimal argument for menus using string replacements
    232       1.34    martin  */
    233       1.34    martin typedef struct arg_replace {
    234       1.34    martin 	const char **argv;
    235       1.34    martin 	size_t argc;
    236       1.34    martin } arg_replace;
    237       1.34    martin 
    238       1.34    martin /*
    239       1.34    martin  * pass a parameter array (for string replacements) into a menu and provide
    240       1.34    martin  * an integer return value
    241       1.34    martin  */
    242       1.34    martin typedef struct arg_rep_int {
    243       1.34    martin 	arg_replace args;
    244       1.34    martin 	int rv;
    245       1.34    martin } arg_rep_int;
    246       1.34    martin 
    247        1.1  dholland typedef struct distinfo {
    248        1.1  dholland 	const char	*name;
    249        1.1  dholland 	uint		set;
    250       1.20    martin 	bool		force_tgz;	/* this set is always in .tgz format */
    251        1.1  dholland 	const char	*desc;
    252        1.1  dholland 	const char	*marker_file;	/* set assumed installed if exists */
    253        1.1  dholland } distinfo;
    254        1.1  dholland 
    255        1.2    martin #define MOUNTLEN 20
    256       1.34    martin 
    257       1.34    martin 
    258       1.34    martin /*
    259       1.34    martin  * A description of a future partition and its usage.
    260       1.34    martin  * A list of this is the output of the first stage partition
    261       1.34    martin  * editor, before it gets transformed into a concrete partition
    262       1.34    martin  * layout according to the partitioning scheme backend.
    263       1.34    martin  */
    264       1.34    martin struct part_usage_info {
    265   1.42.2.6   msaitoh 	daddr_t	size;			/* thumb guestimate of size,
    266   1.42.2.6   msaitoh 					 * [sec if positive, %-of-ram
    267   1.42.2.6   msaitoh 					 * if TMPFS and negative]
    268   1.42.2.6   msaitoh 					 */
    269       1.34    martin 	daddr_t def_size;		/* default size */
    270       1.34    martin 	daddr_t limit;			/* max size */
    271       1.34    martin 	char 	mount[MOUNTLEN];	/* where will we mount this? */
    272       1.34    martin 	enum part_type type;		/* PT_root/PT_swap/PT_EFI_SYSTEM */
    273       1.34    martin 
    274       1.34    martin #define	PUIFLAG_EXTEND		1	/* extend this part if free space
    275       1.34    martin 					 * is available */
    276       1.34    martin #define	PUIFLAG_ADD_OUTER	2	/* Add this partition to the outer
    277       1.34    martin 					 * partitions (if available) */
    278       1.37    martin #define	PUIFLG_IS_OUTER		4	/* this is an existing outer one */
    279   1.42.2.4   msaitoh #define	PUIFLG_ADD_INNER	8	/* add outer also to inner */
    280       1.37    martin #define	PUIFLG_JUST_MOUNTPOINT	16	/* tmpfs of mfs mountpoints */
    281   1.42.2.4   msaitoh #define	PUIFLG_CLONE_PARTS	32	/* clone external partitions */
    282       1.34    martin 	uint flags;
    283       1.34    martin 	struct disk_partitions *parts;	/* Where does this partition live?
    284       1.34    martin 					 * We currently only support
    285       1.34    martin 					 * a single disk, but we plan to
    286       1.34    martin 					 * extend that.
    287       1.34    martin 					 * Use pm->parts to access
    288       1.34    martin 					 * the partitions. */
    289       1.34    martin 	part_id cur_part_id;		/* this may change, but we try to
    290       1.34    martin 					 * fix it up after all changes */
    291       1.34    martin 	daddr_t cur_start;		/* may change during editing, just
    292       1.34    martin 					 * used as a unique identifier */
    293       1.34    martin 	uint32_t cur_flags;		/* PTI_* flags from disk_part_info */
    294       1.34    martin 
    295       1.34    martin #define PUIMNT_ASYNC		0x0001	/* mount -o async */
    296       1.34    martin #define PUIMNT_NOATIME		0x0002	/* mount -o noatime */
    297       1.34    martin #define PUIMNT_NODEV		0x0004	/* mount -o nodev */
    298       1.34    martin #define PUIMNT_NODEVMTIME	0x0008	/* mount -o nodevmtime */
    299       1.34    martin #define PUIMNT_NOEXEC		0x0010	/* mount -o noexec */
    300       1.34    martin #define PUIMNT_NOSUID		0x0020	/* mount -o nosuid */
    301       1.34    martin #define PUIMNT_LOG		0x0040	/* mount -o log */
    302       1.34    martin #define PUIMNT_NOAUTO		0x0080	/* "noauto" fstab flag */
    303       1.34    martin 	unsigned int mountflags;	/* flags for fstab */
    304       1.34    martin #define PUIINST_NEWFS	0x0001		/* need to 'newfs' partition */
    305       1.34    martin #define PUIINST_MOUNT	0x0002		/* need to mount partition */
    306       1.34    martin #define	PUIINST_BOOT	0x0004		/* this is a boot partition */
    307       1.34    martin 	unsigned int instflags;		/* installer handling flags */
    308       1.34    martin 	uint fs_type, fs_version;	/* e.g. FS_LFS, or FS_BSDFS,
    309       1.34    martin 					 * version = 2 for FFSv2 */
    310   1.42.2.8    bouyer 	uint fs_opt1, fs_opt2, fs_opt3;	/* FS specific, FFS: block/frag */
    311   1.42.2.4   msaitoh #ifndef	NO_CLONES
    312   1.42.2.4   msaitoh 	/*
    313   1.42.2.4   msaitoh 	 * Only != NULL when PUIFLG_CLONE_PARTS is set, describes the
    314   1.42.2.4   msaitoh 	 * source partitions to clone here.
    315   1.42.2.4   msaitoh 	 */
    316   1.42.2.4   msaitoh 	struct selected_partitions *clone_src;
    317   1.42.2.4   msaitoh 	/*
    318   1.42.2.4   msaitoh 	 * If clone_src != NULL, this record corresponds to a single
    319   1.42.2.4   msaitoh 	 * selected source partition, if clone_ndx is a valid index in clone_src
    320   1.42.2.4   msaitoh 	 * (>= 0 && <= clone_src->num_sel, or all of them if clone_ndx = ~0U.
    321   1.42.2.4   msaitoh 	 */
    322   1.42.2.4   msaitoh 	size_t clone_ndx;
    323   1.42.2.4   msaitoh #endif
    324       1.34    martin };
    325       1.34    martin 
    326       1.34    martin /*
    327       1.34    martin  * A list of partition suggestions, bundled for editing
    328       1.34    martin  */
    329       1.34    martin struct partition_usage_set {
    330   1.42.2.8    bouyer 	struct disk_partitions *parts;	/* main partition table */
    331   1.42.2.8    bouyer 	size_t num;			/* number of infos */
    332       1.34    martin 	struct part_usage_info *infos;	/* 0 .. num-1 */
    333   1.42.2.8    bouyer 	struct disk_partitions **write_back;
    334   1.42.2.8    bouyer 					/* partition tables from which we
    335   1.42.2.8    bouyer 					 * did delete some partitions and
    336   1.42.2.8    bouyer 					 * that need updating, even if
    337   1.42.2.8    bouyer 					 * no active partition remains. */
    338   1.42.2.8    bouyer 	size_t num_write_back;		/* number of write_back */
    339       1.34    martin 	daddr_t cur_free_space;		/* estimate of free sectors */
    340   1.42.2.8    bouyer 	daddr_t reserved_space;		/* space we are not allowed to use */
    341       1.34    martin 	menu_ent *menu_opts;		/* 0 .. num+N */
    342       1.34    martin 	int menu;			/* the menu to edit this */
    343       1.34    martin 	bool ok;			/* ok to continue (all fit) */
    344       1.34    martin };
    345       1.34    martin 
    346       1.34    martin /*
    347       1.34    martin  * A structure we pass around in menus that edit a single partition out
    348       1.34    martin  * of a partition_usage_set.
    349       1.34    martin  */
    350       1.34    martin struct single_part_fs_edit {
    351       1.34    martin  	struct partition_usage_set *pset;
    352   1.42.2.8    bouyer 	size_t index, first_custom_attr, offset, mode;
    353       1.34    martin 	part_id id;
    354       1.34    martin 	struct disk_part_info info;	/* current partition data */
    355       1.34    martin 	struct part_usage_info *wanted;	/* points at our edit data */
    356       1.34    martin 
    357       1.34    martin 	/*
    358       1.34    martin 	 * "Backup" of old data, so we can restore previous values
    359       1.34    martin 	 * ("undo").
    360       1.34    martin 	 */
    361       1.34    martin 	struct part_usage_info old_usage;
    362       1.34    martin 	struct disk_part_info old_info;
    363       1.34    martin 
    364       1.34    martin 	/* menu return value */
    365       1.34    martin 	int rv;
    366       1.34    martin };
    367       1.34    martin 
    368       1.34    martin /*
    369       1.34    martin  * Description of a full target installation, all partitions and
    370       1.34    martin  * devices (may be accross several struct pm_devs / disks).
    371       1.34    martin  */
    372       1.34    martin struct install_partition_desc {
    373       1.34    martin 	size_t num;				/* how many entries in infos */
    374       1.34    martin 	struct part_usage_info *infos;		/* individual partitions */
    375   1.42.2.8    bouyer 	struct disk_partitions **write_back;	/* partition tables from
    376   1.42.2.8    bouyer 						 * which we did delete some
    377   1.42.2.8    bouyer 						 * partitions and that need
    378   1.42.2.8    bouyer 						 * updating, even if no
    379   1.42.2.8    bouyer 						 * active partition remains. */
    380   1.42.2.8    bouyer 	size_t num_write_back;			/* number of write_back */
    381       1.41    martin 	bool cur_system;			/* target is the life system */
    382        1.1  dholland };
    383        1.1  dholland 
    384        1.1  dholland /* variables */
    385        1.1  dholland 
    386   1.42.2.8    bouyer extern int debug;		/* set by -D option */
    387        1.1  dholland 
    388   1.42.2.8    bouyer extern char machine[SSTRSIZE];
    389        1.1  dholland 
    390   1.42.2.8    bouyer extern int ignorerror;
    391   1.42.2.8    bouyer extern int ttysig_ignore;
    392   1.42.2.8    bouyer extern pid_t ttysig_forward;
    393   1.42.2.8    bouyer extern uint sizemult;
    394       1.34    martin extern const char *multname;
    395       1.34    martin extern const char *err_outofmem;
    396   1.42.2.8    bouyer extern int partman_go; /* run extended partition manager */
    397        1.1  dholland 
    398        1.2    martin /* logging variables */
    399        1.1  dholland 
    400   1.42.2.8    bouyer extern FILE *logfp;
    401   1.42.2.8    bouyer extern FILE *script;
    402        1.1  dholland 
    403        1.2    martin #define MAX_DISKS 15
    404        1.2    martin 
    405   1.42.2.8    bouyer extern daddr_t root_limit;    /* BIOS (etc) read limit */
    406        1.2    martin 
    407   1.42.2.6   msaitoh enum SHRED_T { SHRED_NONE=0, SHRED_ZEROS, SHRED_RANDOM };
    408        1.1  dholland 
    409        1.2    martin /* All information that is unique for each drive */
    410   1.42.2.8    bouyer extern SLIST_HEAD(pm_head_t, pm_devs) pm_head;
    411        1.2    martin 
    412       1.34    martin struct pm_devs {
    413       1.34    martin 	/*
    414       1.34    martin 	 * If device is blocked (e.g. part of a raid)
    415       1.34    martin 	 * this is a pointers to the  parent dev
    416       1.34    martin 	 */
    417       1.34    martin 	void *refdev;
    418       1.34    martin 
    419       1.34    martin 	char diskdev[SSTRSIZE];		/* Actual name of the disk. */
    420       1.34    martin 	char diskdev_descr[STRSIZE];	/* e.g. IDENTIFY result */
    421       1.34    martin 
    422       1.34    martin 	/*
    423       1.34    martin 	 * What the disk layout should look like.
    424       1.34    martin 	 */
    425       1.34    martin 	struct disk_partitions *parts;
    426       1.34    martin 
    427       1.34    martin 	/*
    428       1.34    martin 	 * The device does not take a MBR, even if we usually use
    429       1.34    martin 	 * MBR master / disklabel secondary partitioning.
    430       1.34    martin 	 * Used e.g. for raid* pseudo-disks.
    431       1.34    martin 	 */
    432       1.34    martin 	bool no_mbr;	/* userd for raid (etc) */
    433       1.34    martin 
    434       1.34    martin 	/*
    435       1.34    martin 	 * This device can not be partitioned (in any way).
    436       1.34    martin 	 * Used for wedges (dk*) or LVM devices.
    437       1.34    martin 	 */
    438       1.34    martin 	bool no_part;
    439       1.34    martin 
    440       1.41    martin 	/*
    441       1.41    martin 	 * This is a pseudo-device representing the currently running
    442       1.41    martin 	 * system (i.e. all mounted file systems).
    443       1.41    martin 	 */
    444       1.41    martin 	bool cur_system;
    445       1.41    martin 
    446   1.42.2.6   msaitoh 	/* Actual values for current disk geometry - set by find_disks() or
    447   1.42.2.6   msaitoh 	 *  md_get_info()
    448   1.42.2.6   msaitoh 	 */
    449   1.42.2.6   msaitoh 	uint sectorsize, dlcyl, dlhead, dlsec, dlcylsize, current_cylsize;
    450   1.42.2.6   msaitoh 	/*
    451   1.42.2.6   msaitoh 	 * Total size of the disk - in 'sectorsize' units (!)
    452   1.42.2.6   msaitoh 	 */
    453   1.42.2.6   msaitoh 	daddr_t dlsize;	/* total number of disk sectors */
    454       1.34    martin 
    455   1.42.2.6   msaitoh 	/* Area of disk we can allocate, start and size in sectors. */
    456       1.34    martin 	daddr_t ptstart, ptsize;
    457       1.34    martin 
    458       1.34    martin 	/* For some bootblocks we need to know the CHS addressable limit */
    459       1.34    martin 	daddr_t max_chs;	/* bcyl * bhead * bsec */
    460       1.34    martin 
    461       1.34    martin 	/* If we have an MBR boot partition, start and size in sectors */
    462       1.34    martin 	daddr_t bootstart, bootsize;
    463       1.34    martin 
    464       1.34    martin 	/*
    465       1.34    martin 	 * In extended partitioning: all partitions in parts (number of
    466       1.34    martin 	 * entries is parts->num_part) may actually be mounted (temporarily)
    467       1.34    martin 	 * somewhere, e.g. to access a vnd device on them. This list has
    468       1.34    martin 	 * a pointer to the current mount point (strdup()'d) if mounted,
    469       1.34    martin 	 * or NULL if not.
    470       1.34    martin 	 */
    471       1.34    martin 	char **mounted;
    472       1.34    martin 
    473       1.34    martin 	bool unsaved;	/* Flag indicating to partman that device need saving */
    474       1.34    martin 	bool found;	/* Flag to delete unplugged and unconfigured devices */
    475       1.34    martin 	int blocked;	/* Device is busy and cannot be changed */
    476       1.34    martin 
    477       1.34    martin 	SLIST_ENTRY(pm_devs) l;
    478       1.34    martin };
    479   1.42.2.8    bouyer extern struct pm_devs *pm; /* Pointer to current device with which we work */
    480   1.42.2.8    bouyer extern struct pm_devs *pm_new; /* Pointer for next allocating device in find_disks() */
    481        1.2    martin 
    482        1.2    martin /* Generic structure for partman */
    483       1.34    martin struct part_entry {
    484       1.34    martin 	part_id id;
    485       1.34    martin 	struct disk_partitions *parts;
    486       1.34    martin 	void *dev_ptr;
    487   1.42.2.6   msaitoh 	size_t index;	/* e.g. if PM_RAID: this is raids[index] */
    488       1.34    martin 	int dev_ptr_delta;
    489       1.34    martin 	char fullname[SSTRSIZE];
    490       1.34    martin 	enum {PM_DISK=1, PM_PART, PM_SPEC,
    491       1.34    martin 	    PM_RAID, PM_CGD, PM_VND, PM_LVM, PM_LVMLV} type;
    492       1.34    martin };
    493        1.1  dholland 
    494        1.1  dholland /* Relative file name for storing a distribution. */
    495   1.42.2.8    bouyer extern char xfer_dir[STRSIZE];
    496   1.42.2.8    bouyer extern int  clean_xfer_dir;
    497        1.1  dholland 
    498        1.1  dholland #if !defined(SYSINST_FTP_HOST)
    499        1.1  dholland #define SYSINST_FTP_HOST	"ftp.NetBSD.org"
    500        1.1  dholland #endif
    501        1.1  dholland 
    502       1.16    martin #if !defined(SYSINST_HTTP_HOST)
    503       1.16    martin #define SYSINST_HTTP_HOST	"cdn.NetBSD.org"
    504       1.16    martin #endif
    505       1.16    martin 
    506        1.1  dholland #if !defined(SYSINST_FTP_DIR)
    507       1.12    martin #if defined(NETBSD_OFFICIAL_RELEASE)
    508        1.1  dholland #define SYSINST_FTP_DIR		"pub/NetBSD/NetBSD-" REL
    509       1.13    martin #elif defined(REL_PATH)
    510       1.18    martin #define SYSINST_FTP_DIR		"pub/NetBSD-daily/" REL_PATH "/latest"
    511       1.12    martin #else
    512       1.13    martin #define SYSINST_FTP_DIR		"pub/NetBSD/NetBSD-" REL
    513       1.12    martin #endif
    514        1.1  dholland #endif
    515        1.1  dholland 
    516       1.29    martin #if !defined(ARCH_SUBDIR)
    517       1.29    martin #define	ARCH_SUBDIR	MACH
    518       1.29    martin #endif
    519       1.29    martin #if !defined(PKG_ARCH_SUBDIR)
    520       1.29    martin #define	PKG_ARCH_SUBDIR	MACH
    521       1.29    martin #endif
    522       1.29    martin 
    523        1.1  dholland #if !defined(SYSINST_PKG_HOST)
    524       1.15    martin #define SYSINST_PKG_HOST	"ftp.NetBSD.org"
    525        1.1  dholland #endif
    526       1.16    martin #if !defined(SYSINST_PKG_HTTP_HOST)
    527       1.16    martin #define SYSINST_PKG_HTTP_HOST	"cdn.NetBSD.org"
    528       1.16    martin #endif
    529        1.1  dholland 
    530        1.1  dholland #if !defined(SYSINST_PKG_DIR)
    531        1.1  dholland #define SYSINST_PKG_DIR		"pub/pkgsrc/packages/NetBSD"
    532        1.1  dholland #endif
    533        1.1  dholland 
    534       1.17    martin #if !defined(PKG_SUBDIR)
    535       1.17    martin #define	PKG_SUBDIR		REL
    536       1.17    martin #endif
    537       1.17    martin 
    538        1.1  dholland #if !defined(SYSINST_PKGSRC_HOST)
    539        1.1  dholland #define SYSINST_PKGSRC_HOST	SYSINST_PKG_HOST
    540        1.1  dholland #endif
    541       1.16    martin #if !defined(SYSINST_PKGSRC_HTTP_HOST)
    542       1.16    martin #define SYSINST_PKGSRC_HTTP_HOST	SYSINST_PKG_HTTP_HOST
    543       1.16    martin #endif
    544        1.1  dholland 
    545       1.20    martin #ifndef SETS_TAR_SUFF
    546       1.20    martin #define	SETS_TAR_SUFF	 "tgz"
    547       1.20    martin #endif
    548       1.20    martin 
    549   1.42.2.4   msaitoh #ifdef	USING_PAXASTAR
    550   1.42.2.4   msaitoh #define	TAR_EXTRACT_FLAGS	"-xhepf"
    551   1.42.2.4   msaitoh #else
    552   1.42.2.7    bouyer #define	TAR_EXTRACT_FLAGS	"-xpf"
    553   1.42.2.4   msaitoh #endif
    554   1.42.2.4   msaitoh 
    555        1.1  dholland /* Abs. path we extract binary sets from */
    556   1.42.2.8    bouyer extern char ext_dir_bin[STRSIZE];
    557        1.1  dholland 
    558        1.1  dholland /* Abs. path we extract source sets from */
    559   1.42.2.8    bouyer extern char ext_dir_src[STRSIZE];
    560        1.1  dholland 
    561        1.1  dholland /* Abs. path we extract pkgsrc from */
    562   1.42.2.8    bouyer extern char ext_dir_pkgsrc[STRSIZE];
    563        1.1  dholland 
    564        1.1  dholland /* Place we look for binary sets in all fs types */
    565   1.42.2.8    bouyer extern char set_dir_bin[STRSIZE];
    566        1.1  dholland 
    567        1.1  dholland /* Place we look for source sets in all fs types */
    568   1.42.2.8    bouyer extern char set_dir_src[STRSIZE];
    569        1.1  dholland 
    570        1.1  dholland /* Place we look for pkgs in all fs types */
    571   1.42.2.8    bouyer extern char pkg_dir[STRSIZE];
    572        1.1  dholland 
    573        1.1  dholland /* Place we look for pkgsrc in all fs types */
    574   1.42.2.8    bouyer extern char pkgsrc_dir[STRSIZE];
    575        1.1  dholland 
    576        1.1  dholland /* User shell */
    577   1.42.2.8    bouyer extern const char *ushell;
    578        1.1  dholland 
    579       1.16    martin #define	XFER_FTP	0
    580       1.16    martin #define	XFER_HTTP	1
    581       1.16    martin #define	XFER_MAX	XFER_HTTP
    582       1.16    martin 
    583        1.1  dholland struct ftpinfo {
    584       1.34    martin 	char xfer_host[XFER_MAX+1][STRSIZE];
    585       1.34    martin 	char dir[STRSIZE] ;
    586       1.34    martin 	char user[SSTRSIZE];
    587       1.34    martin 	char pass[STRSIZE];
    588       1.34    martin 	char proxy[STRSIZE];
    589       1.34    martin 	unsigned int xfer;	/* XFER_FTP for "ftp" or XFER_HTTP for "http" */
    590        1.1  dholland };
    591        1.1  dholland 
    592        1.1  dholland /* use the same struct for sets ftp and to build pkgpath */
    593   1.42.2.8    bouyer extern struct ftpinfo ftp, pkg, pkgsrc;
    594        1.1  dholland 
    595   1.42.2.8    bouyer extern int (*fetch_fn)(const char *);
    596   1.42.2.8    bouyer extern char nfs_host[STRSIZE];
    597   1.42.2.8    bouyer extern char nfs_dir[STRSIZE];
    598        1.1  dholland 
    599   1.42.2.8    bouyer extern char cdrom_dev[SSTRSIZE];		/* Typically "cd0a" */
    600   1.42.2.8    bouyer extern char fd_dev[SSTRSIZE];			/* Typically "/dev/fd0a" */
    601   1.42.2.8    bouyer extern const char *fd_type;			/* "msdos", "ffs" or maybe "ados" */
    602        1.1  dholland 
    603   1.42.2.8    bouyer extern char localfs_dev[SSTRSIZE];
    604   1.42.2.8    bouyer extern char localfs_fs[SSTRSIZE];
    605   1.42.2.8    bouyer extern char localfs_dir[STRSIZE];
    606        1.1  dholland 
    607   1.42.2.8    bouyer extern char targetroot_mnt[SSTRSIZE];
    608        1.1  dholland 
    609   1.42.2.8    bouyer extern int  mnt2_mounted;
    610        1.1  dholland 
    611   1.42.2.8    bouyer extern char dist_postfix[SSTRSIZE];
    612   1.42.2.8    bouyer extern char dist_tgz_postfix[SSTRSIZE];
    613        1.1  dholland 
    614        1.1  dholland /* needed prototypes */
    615        1.1  dholland void set_menu_numopts(int, int);
    616        1.2    martin void remove_color_options(void);
    617        1.3    martin void remove_raid_options(void);
    618        1.3    martin void remove_lvm_options(void);
    619        1.3    martin void remove_cgd_options(void);
    620        1.1  dholland 
    621        1.1  dholland /* Machine dependent functions .... */
    622        1.1  dholland void	md_init(void);
    623        1.1  dholland void	md_init_set_status(int); /* SFLAG_foo */
    624        1.1  dholland 
    625        1.1  dholland  /* MD functions if user selects install - in order called */
    626       1.34    martin bool	md_get_info(struct install_partition_desc*);
    627   1.42.2.8    bouyer /* returns -1 to restart partitioning, 0 for error, 1 for success */
    628   1.42.2.8    bouyer int	md_make_bsd_partitions(struct install_partition_desc*);
    629       1.34    martin bool	md_check_partitions(struct install_partition_desc*);
    630       1.34    martin #ifdef HAVE_GPT
    631       1.34    martin /*
    632       1.34    martin  * New GPT partitions have been written, update bootloader or remember
    633       1.34    martin  * data untill needed in md_post_newfs
    634       1.34    martin  */
    635       1.34    martin bool	md_gpt_post_write(struct disk_partitions*, part_id root_id,
    636       1.34    martin 	    bool root_is_new, part_id efi_id, bool efi_is_new);
    637       1.34    martin #endif
    638       1.34    martin /*
    639       1.34    martin  * md_pre_disklabel and md_post_disklabel may be called
    640       1.34    martin  * multiple times, for each affected device, with the
    641       1.34    martin  * "inner" partitions pointer of the relevant partitions
    642       1.34    martin  * passed.
    643       1.34    martin  */
    644       1.34    martin bool	md_pre_disklabel(struct install_partition_desc*, struct disk_partitions*);
    645       1.34    martin bool	md_post_disklabel(struct install_partition_desc*, struct disk_partitions*);
    646       1.38    martin int	md_pre_mount(struct install_partition_desc*, size_t);
    647       1.34    martin int	md_post_newfs(struct install_partition_desc*);
    648  1.42.2.10   msaitoh int	md_post_extract(struct install_partition_desc*, bool upgrade);
    649       1.34    martin void	md_cleanup_install(struct install_partition_desc*);
    650        1.1  dholland 
    651        1.1  dholland  /* MD functions if user selects upgrade - in order called */
    652       1.34    martin int	md_pre_update(struct install_partition_desc*);
    653       1.34    martin int	md_update(struct install_partition_desc*);
    654        1.1  dholland /* Also calls md_post_extract() */
    655        1.1  dholland 
    656        1.1  dholland /* from main.c */
    657        1.1  dholland void	toplevel(void);
    658        1.1  dholland 
    659        1.1  dholland /* from disks.c */
    660       1.21    martin bool	get_default_cdrom(char *, size_t);
    661       1.41    martin int	find_disks(const char *, bool);
    662       1.22    martin bool enumerate_disks(void *state,bool (*func)(void *state, const char *dev));
    663       1.24    martin bool is_cdrom_device(const char *dev, bool as_target);
    664       1.25    martin bool is_bootable_device(const char *dev);
    665       1.25    martin bool is_partitionable_device(const char *dev);
    666       1.34    martin bool convert_scheme(struct pm_devs *p, bool is_boot_drive, const char **err_msg);
    667       1.22    martin 
    668   1.42.2.4   msaitoh #ifndef	NO_CLONES
    669   1.42.2.4   msaitoh /* a single partition selected for cloning (etc) */
    670   1.42.2.4   msaitoh struct selected_partition {
    671   1.42.2.4   msaitoh 	struct disk_partitions *parts;
    672   1.42.2.4   msaitoh 	part_id id;
    673   1.42.2.4   msaitoh };
    674   1.42.2.4   msaitoh struct selected_partitions {
    675   1.42.2.4   msaitoh 	struct selected_partition *selection;
    676   1.42.2.4   msaitoh 	size_t num_sel;
    677   1.42.2.4   msaitoh 	bool with_data;		/* partitions and their data selected */
    678   1.42.2.4   msaitoh 	bool free_parts;	/* caller should free parts */
    679   1.42.2.4   msaitoh };
    680   1.42.2.4   msaitoh bool select_partitions(struct selected_partitions *res,
    681   1.42.2.4   msaitoh     const struct disk_partitions *ignore);
    682   1.42.2.4   msaitoh daddr_t	selected_parts_size(struct selected_partitions *);
    683   1.42.2.4   msaitoh void	free_selected_partitions(struct selected_partitions *);
    684   1.42.2.4   msaitoh 
    685   1.42.2.4   msaitoh struct clone_target_menu_data {
    686   1.42.2.4   msaitoh 	struct partition_usage_set usage;
    687   1.42.2.4   msaitoh 	int res;
    688   1.42.2.4   msaitoh };
    689   1.42.2.4   msaitoh 
    690   1.42.2.4   msaitoh int	clone_target_select(menudesc *m, void *arg);
    691   1.42.2.4   msaitoh bool	clone_partition_data(struct disk_partitions *dest_parts, part_id did,
    692   1.42.2.4   msaitoh 	struct disk_partitions *src_parts, part_id sid);
    693   1.42.2.4   msaitoh #endif
    694   1.42.2.4   msaitoh 
    695        1.1  dholland struct menudesc;
    696        1.1  dholland void	disp_cur_fspart(int, int);
    697       1.34    martin int	make_filesystems(struct install_partition_desc *);
    698       1.34    martin int	make_fstab(struct install_partition_desc *);
    699       1.34    martin int	mount_disks(struct install_partition_desc *);
    700   1.42.2.9       snj void	set_swap_if_low_ram(struct install_partition_desc *);
    701   1.42.2.9       snj void	set_swap(struct install_partition_desc *);
    702   1.42.2.8    bouyer void	clear_swap(void);
    703        1.1  dholland int	check_swap(const char *, int);
    704       1.34    martin char *bootxx_name(struct install_partition_desc *);
    705        1.2    martin int get_dkwedges(struct dkwedge_info **, const char *);
    706        1.1  dholland 
    707        1.1  dholland /* from disks_lfs.c */
    708        1.1  dholland int	fs_is_lfs(void *);
    709        1.1  dholland 
    710        1.1  dholland /* from label.c */
    711       1.34    martin /*
    712       1.34    martin  * Bits valid for "flags" in get_last_mounted.
    713       1.34    martin  * Currently we return the real last mount from FFS, the volume label
    714       1.34    martin  * from FAT32, and nothing otherwise. The NTFS support is currently
    715       1.34    martin  * restricted to verify the partition has an NTFS (as some partitioning
    716       1.34    martin  * schemes do not tell NTFS from FAT).
    717       1.34    martin  */
    718       1.34    martin #define GLM_LIKELY_FFS		1U
    719       1.34    martin #define	GLM_MAYBE_FAT32		2U
    720       1.34    martin #define	GLM_MAYBE_NTFS		4U
    721       1.34    martin /*
    722       1.34    martin  * possible fs_sub_types are currently:
    723       1.34    martin  *  FS_BSDFFS:
    724       1.34    martin  *	0	unknown
    725       1.34    martin  *	1	FFSv1
    726       1.34    martin  *	2	FFSv2
    727       1.34    martin  * FS_MSDOS:
    728       1.34    martin  *	0	unknown
    729       1.34    martin  *	else	MBR_PTYPE_FAT* for the current FAT variant
    730       1.34    martin  * FS_NTFS:
    731       1.34    martin  *	0	unknown
    732       1.34    martin  *	else	MBR_PTYPE_NTFS (if valid NTFS was found)
    733       1.34    martin  *
    734       1.34    martin  * The fs_type and fs_sub_type pointers may be NULL.
    735       1.34    martin  */
    736       1.34    martin const char *get_last_mounted(int fd, daddr_t offset, uint *fs_type,
    737       1.34    martin      uint *fs_sub_type, uint flags);
    738       1.42    martin void	canonicalize_last_mounted(char*);
    739   1.42.2.6   msaitoh int	edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset, bool install);
    740        1.2    martin int edit_ptn(menudesc *, void *);
    741       1.34    martin int checkoverlap(struct disk_partitions *parts);
    742   1.42.2.8    bouyer daddr_t getpartsize(struct disk_partitions *parts, daddr_t orig_start,
    743   1.42.2.8    bouyer     daddr_t partstart, daddr_t defpartsize);
    744       1.34    martin daddr_t getpartoff(struct disk_partitions *parts, daddr_t defpartstart);
    745        1.1  dholland 
    746        1.1  dholland /* from install.c */
    747        1.1  dholland void	do_install(void);
    748        1.1  dholland 
    749        1.1  dholland /* from factor.c */
    750        1.1  dholland void	factor(long, long *, int, int *);
    751        1.1  dholland 
    752        1.1  dholland /* from fdisk.c */
    753        1.1  dholland void	get_disk_info(char *);
    754        1.1  dholland void	set_disk_info(char *);
    755        1.1  dholland 
    756        1.1  dholland /* from geom.c */
    757       1.36  christos bool	disk_ioctl(const char *, unsigned long, void *);
    758       1.36  christos bool	get_wedge_list(const char *, struct dkwedge_list *);
    759       1.36  christos bool	get_wedge_info(const char *, struct dkwedge_info *);
    760       1.36  christos bool	get_disk_geom(const char *, struct disk_geom *);
    761       1.36  christos bool	get_label_geom(const char *, struct disklabel *);
    762        1.1  dholland 
    763        1.1  dholland /* from net.c */
    764        1.1  dholland extern int network_up;
    765        1.4       roy extern char net_namesvr[STRSIZE];
    766       1.16    martin int	get_via_ftp(unsigned int);
    767        1.1  dholland int	get_via_nfs(void);
    768        1.1  dholland int	config_network(void);
    769        1.1  dholland void	mnt_net_config(void);
    770        1.1  dholland void	make_url(char *, struct ftpinfo *, const char *);
    771        1.1  dholland int	get_pkgsrc(void);
    772       1.16    martin const char *url_proto(unsigned int);
    773        1.1  dholland 
    774        1.1  dholland /* From run.c */
    775        1.1  dholland int	collect(int, char **, const char *, ...) __printflike(3, 4);
    776        1.1  dholland int	run_program(int, const char *, ...) __printflike(2, 3);
    777        1.1  dholland void	do_logging(void);
    778        1.1  dholland int	do_system(const char *);
    779        1.1  dholland 
    780        1.1  dholland /* from upgrade.c */
    781        1.1  dholland void	do_upgrade(void);
    782       1.40    martin void	do_reinstall_sets(void);
    783        1.1  dholland void	restore_etc(void);
    784        1.1  dholland 
    785       1.34    martin /* from part_edit.c */
    786       1.34    martin int	err_msg_win(const char*);
    787       1.34    martin const struct disk_partitioning_scheme *select_part_scheme(struct pm_devs *dev,
    788       1.34    martin     const struct disk_partitioning_scheme *skip, bool bootable,
    789       1.34    martin     const char *title);
    790   1.42.2.8    bouyer /*
    791   1.42.2.8    bouyer  * return value:
    792   1.42.2.8    bouyer  *  0 -> abort
    793   1.42.2.8    bouyer  *  1 -> ok, continue
    794   1.42.2.8    bouyer  *  -1 -> partitions have been deleted, start from scratch
    795   1.42.2.8    bouyer */
    796   1.42.2.8    bouyer int	edit_outer_parts(struct disk_partitions*);
    797       1.34    martin bool	parts_use_wholedisk(struct disk_partitions*,
    798       1.34    martin 	     size_t add_ext_parts, const struct disk_part_info *ext_parts);
    799       1.34    martin 
    800       1.34    martin /*
    801       1.34    martin  * Machine dependent partitioning function, only used when
    802       1.34    martin  * innern/outer partitioning schemes are in use - this sets
    803       1.34    martin  * up the outer scheme for maximum NetBSD usage.
    804       1.34    martin  */
    805       1.34    martin bool	md_parts_use_wholedisk(struct disk_partitions*);
    806       1.34    martin 
    807        1.1  dholland /* from util.c */
    808   1.42.2.2   msaitoh bool	root_is_read_only(void);
    809       1.34    martin void	get_ptn_alignment(const struct disk_partitions *parts, daddr_t *align, daddr_t *p0off);
    810   1.42.2.4   msaitoh struct disk_partitions *get_inner_parts(struct disk_partitions *parts);
    811       1.27    martin char*	str_arg_subst(const char *, size_t, const char **);
    812       1.26    martin void	msg_display_subst(const char *, size_t, ...);
    813       1.34    martin void	msg_display_add_subst(const char *, size_t, ...);
    814        1.9    martin int	ask_yesno(const char *);
    815        1.9    martin int	ask_noyes(const char *);
    816       1.34    martin void	hit_enter_to_continue(const char *msg, const char *title);
    817       1.34    martin /*
    818       1.34    martin  * return value:
    819       1.34    martin  *  0 -> abort
    820       1.34    martin  *  1 -> re-edit
    821       1.34    martin  *  2 -> continue installation
    822       1.34    martin */
    823       1.34    martin int	ask_reedit(const struct disk_partitions *);
    824        1.1  dholland int	dir_exists_p(const char *);
    825        1.1  dholland int	file_exists_p(const char *);
    826        1.1  dholland int	file_mode_match(const char *, unsigned int);
    827       1.34    martin uint64_t	get_ramsize(void);	/* in MB! */
    828        1.1  dholland void	ask_sizemult(int);
    829        1.1  dholland void	run_makedev(void);
    830        1.1  dholland int	boot_media_still_needed(void);
    831        1.1  dholland int	get_via_floppy(void);
    832        1.1  dholland int	get_via_cdrom(void);
    833        1.1  dholland int	get_via_localfs(void);
    834        1.1  dholland int	get_via_localdir(void);
    835        1.1  dholland void	show_cur_distsets(void);
    836        1.1  dholland void	make_ramdisk_dir(const char *);
    837        1.1  dholland void    set_kernel_set(unsigned int);
    838   1.42.2.6   msaitoh void    set_noextract_set(unsigned int);
    839        1.1  dholland unsigned int    get_kernel_set(void);
    840        1.1  dholland unsigned int    set_X11_selected(void);
    841        1.1  dholland int 	get_and_unpack_sets(int, msg, msg, msg);
    842        1.1  dholland int	sanity_check(void);
    843        1.1  dholland int	set_timezone(void);
    844        1.1  dholland void	scripting_fprintf(FILE *, const char *, ...) __printflike(2, 3);
    845        1.1  dholland void	scripting_vfprintf(FILE *, const char *, va_list) __printflike(2, 0);
    846       1.35  christos void	add_rc_conf(const char *, ...) __printflike(1, 2);
    847        1.1  dholland int	del_rc_conf(const char *);
    848        1.1  dholland void	add_sysctl_conf(const char *, ...) __printflike(1, 2);
    849        1.1  dholland void	enable_rc_conf(void);
    850   1.42.2.6   msaitoh void	set_sizemult(daddr_t, uint bps);
    851   1.42.2.6   msaitoh void	set_default_sizemult(const char *disk, daddr_t unit, uint bps);
    852        1.1  dholland int	check_lfs_progs(void);
    853        1.1  dholland void	init_set_status(int);
    854        1.1  dholland void	customise_sets(void);
    855        1.1  dholland void	umount_mnt2(void);
    856        1.1  dholland int 	set_is_source(const char *);
    857        1.1  dholland const char *set_dir_for_set(const char *);
    858        1.1  dholland const char *ext_dir_for_set(const char *);
    859       1.35  christos void	replace(const char *, const char *, ...) __printflike(2, 3);
    860        1.1  dholland void	get_tz_default(void);
    861   1.42.2.6   msaitoh distinfo*	get_set_distinfo(int);
    862        1.1  dholland int	extract_file(distinfo *, int);
    863   1.42.2.6   msaitoh int extract_file_to(distinfo *dist, int update, const char *dest_dir,
    864   1.42.2.6   msaitoh     const char *extr_pattern, bool do_stats);
    865        1.2    martin void	do_coloring (unsigned int, unsigned int);
    866        1.2    martin int set_menu_select(menudesc *, void *);
    867        1.5  christos const char *safectime(time_t *);
    868       1.20    martin bool	use_tgz_for_set(const char*);
    869       1.20    martin const char *set_postfix(const char*);
    870       1.34    martin bool	usage_set_from_parts(struct partition_usage_set*,
    871       1.34    martin 	    struct disk_partitions*);
    872       1.34    martin void	free_usage_set(struct partition_usage_set*);
    873       1.34    martin bool	install_desc_from_parts(struct install_partition_desc *,
    874       1.34    martin 	    struct disk_partitions*);
    875       1.34    martin void	free_install_desc(struct install_partition_desc*);
    876   1.42.2.6   msaitoh bool	may_swap_if_not_sdmmc(const char*);
    877        1.1  dholland 
    878        1.1  dholland /* from target.c */
    879        1.1  dholland #if defined(DEBUG)  ||	defined(DEBUG_ROOT)
    880        1.1  dholland void	backtowin(void);
    881        1.1  dholland #endif
    882       1.39    martin bool	is_root_part_mount(const char *);
    883        1.1  dholland const	char *concat_paths(const char *, const char *);
    884        1.1  dholland const	char *target_expand(const char *);
    885       1.34    martin bool	needs_expanding(const char *, size_t);
    886        1.1  dholland void	make_target_dir(const char *);
    887        1.1  dholland void	append_to_target_file(const char *, const char *);
    888        1.1  dholland void	echo_to_target_file(const char *, const char *);
    889        1.1  dholland void	trunc_target_file(const char *);
    890        1.1  dholland const	char *target_prefix(void);
    891        1.1  dholland int	target_chdir(const char *);
    892        1.1  dholland void	target_chdir_or_die(const char *);
    893        1.1  dholland int	target_already_root(void);
    894        1.1  dholland FILE	*target_fopen(const char *, const char *);
    895        1.1  dholland int	target_collect_file(int, char **, const char *);
    896        1.1  dholland int	is_active_rootpart(const char *, int);
    897        1.1  dholland int	cp_to_target(const char *, const char *);
    898        1.1  dholland void	dup_file_into_target(const char *);
    899        1.1  dholland void	mv_within_target_or_die(const char *, const char *);
    900        1.1  dholland int	cp_within_target(const char *, const char *, int);
    901       1.34    martin int	target_mount(const char *, const char *, const char *);
    902       1.34    martin int	target_mount_do(const char *, const char *, const char *);
    903        1.1  dholland int	target_test(unsigned int, const char *);
    904        1.1  dholland int	target_dir_exists_p(const char *);
    905        1.1  dholland int	target_file_exists_p(const char *);
    906        1.1  dholland int	target_symlink_exists_p(const char *);
    907        1.1  dholland void	unwind_mounts(void);
    908  1.42.2.10   msaitoh void	register_post_umount_delwedge(const char *disk, const char *wedge);
    909        1.1  dholland int	target_mounted(void);
    910   1.42.2.1   msaitoh void	umount_root(void);
    911        1.1  dholland 
    912        1.2    martin /* from partman.c */
    913       1.19       rin #ifndef NO_PARTMAN
    914        1.2    martin int partman(void);
    915       1.34    martin int pm_getrefdev(struct pm_devs *);
    916       1.19       rin void update_wedges(const char *);
    917       1.34    martin void pm_destroy_all(void);
    918       1.19       rin #else
    919       1.19       rin static inline int partman(void) { return -1; }
    920       1.34    martin static inline int pm_getrefdev(struct pm_devs *x __unused) { return -1; }
    921       1.19       rin #define update_wedges(x) __nothing
    922       1.19       rin #endif
    923   1.42.2.6   msaitoh void pmdiskentry_enable(menudesc*, struct part_entry *);
    924       1.34    martin int pm_partusage(struct pm_devs *, int, int);
    925       1.34    martin void pm_setfstype(struct pm_devs *, part_id, int, int);
    926   1.42.2.6   msaitoh void pm_set_lvmpv(struct pm_devs *, part_id, bool);
    927   1.42.2.6   msaitoh bool pm_is_lvmpv(struct pm_devs *, part_id, const struct disk_part_info*);
    928        1.2    martin int pm_editpart(int);
    929       1.34    martin void pm_rename(struct pm_devs *);
    930   1.42.2.6   msaitoh void pm_shred(struct part_entry *, int);
    931       1.34    martin void pm_umount(struct pm_devs *, int);
    932       1.34    martin int pm_unconfigure(struct pm_devs *);
    933   1.42.2.6   msaitoh int pm_cgd_edit_new(struct pm_devs *pm, part_id id);
    934   1.42.2.6   msaitoh int pm_cgd_edit_old(struct part_entry *);
    935       1.34    martin void pm_wedges_fill(struct pm_devs *);
    936   1.42.2.6   msaitoh void pm_edit_partitions(struct part_entry *);
    937   1.42.2.6   msaitoh part_id pm_whole_disk(struct part_entry *, int);
    938   1.42.2.6   msaitoh struct pm_devs * pm_from_pe(struct part_entry *);
    939   1.42.2.6   msaitoh bool pm_force_parts(struct pm_devs *);
    940       1.34    martin 
    941       1.34    martin /*
    942       1.34    martin  * Parse a file system position or size in a common way, return
    943       1.34    martin  * sector count and multiplicator.
    944       1.34    martin  * If "extend" is supported, things like 120+ will be parsed as
    945       1.34    martin  * 120 plus "extend this" flag.
    946       1.34    martin  * Caller needs to init muliplicator upfront to the default value.
    947       1.34    martin  */
    948       1.34    martin daddr_t parse_disk_pos(
    949       1.34    martin 	const char *,	/* in: input string */
    950       1.34    martin 	daddr_t *,	/* in/out: multiplicator for return value */
    951   1.42.2.6   msaitoh 	daddr_t bps,	/* in: sector size in bytes */
    952   1.42.2.6   msaitoh 	daddr_t,	/* in: cylinder size in sectors */
    953       1.34    martin 	bool *);	/* NULL if "extend" is not supported, & of
    954       1.34    martin 			 * "extend" flag otherwise */
    955        1.7    martin 
    956        1.7    martin /* flags whether to offer the respective options (depending on helper
    957        1.7    martin    programs available on install media */
    958       1.34    martin extern int have_raid, have_vnd, have_cgd, have_lvm, have_gpt, have_dk;
    959        1.7    martin /* initialize above variables */
    960        1.7    martin void check_available_binaries(void);
    961        1.2    martin 
    962        1.1  dholland /* from bsddisklabel.c */
    963   1.42.2.8    bouyer /* returns -1 to restart partitioning, 0 for error, 1 for success */
    964   1.42.2.8    bouyer int	make_bsd_partitions(struct install_partition_desc*);
    965        1.1  dholland void	set_ptn_titles(menudesc *, int, void *);
    966        1.1  dholland int	set_ptn_size(menudesc *, void *);
    967       1.34    martin bool	get_ptn_sizes(struct partition_usage_set*);
    968       1.34    martin bool	check_partitions(struct install_partition_desc*);
    969        1.1  dholland 
    970        1.1  dholland /* from aout2elf.c */
    971        1.1  dholland int move_aout_libs(void);
    972        1.1  dholland 
    973        1.1  dholland #ifdef WSKBD
    974        1.1  dholland void	get_kb_encoding(void);
    975        1.1  dholland void	save_kb_encoding(void);
    976        1.1  dholland #else
    977        1.1  dholland #define	get_kb_encoding()
    978        1.1  dholland #define	save_kb_encoding()
    979        1.1  dholland #endif
    980        1.1  dholland 
    981        1.1  dholland /* from configmenu.c */
    982       1.34    martin void	do_configmenu(struct install_partition_desc*);
    983        1.1  dholland 
    984        1.1  dholland /* from checkrc.c */
    985        1.1  dholland int	check_rcvar(const char *);
    986        1.1  dholland int	check_rcdefault(const char *);
    987   1.42.2.8    bouyer extern	WINDOW *mainwin;
    988        1.2    martin 
    989       1.34    martin /* in menus.mi */
    990       1.34    martin void expand_all_option_texts(menudesc *menu, void *arg);
    991       1.34    martin void resize_menu_height(menudesc *);
    992       1.34    martin 
    993        1.1  dholland #endif	/* _DEFS_H_ */
    994