Minor improvements for autopart and setupcd
This commit is contained in:
parent
e2a0ddf863
commit
0348b8d0ca
2 changed files with 145 additions and 145 deletions
|
@ -54,7 +54,7 @@ Num Sort Type
|
||||||
#define DEV_FD0 0x200 /* Device number of /dev/fd0 */
|
#define DEV_FD0 0x200 /* Device number of /dev/fd0 */
|
||||||
#define DEV_C0D0 0x300 /* Device number of /dev/c0d0 */
|
#define DEV_C0D0 0x300 /* Device number of /dev/c0d0 */
|
||||||
|
|
||||||
#define MIN_REGION_MB 80
|
#define MIN_REGION_MB 180
|
||||||
#define MIN_REGION_SECTORS (1024*1024*MIN_REGION_MB/SECTOR_SIZE)
|
#define MIN_REGION_SECTORS (1024*1024*MIN_REGION_MB/SECTOR_SIZE)
|
||||||
|
|
||||||
#define MAX_REGION_MB 4095
|
#define MAX_REGION_MB 4095
|
||||||
|
@ -374,7 +374,7 @@ struct part_entry table[1 + NR_PARTITIONS];
|
||||||
int existing[1 + NR_PARTITIONS];
|
int existing[1 + NR_PARTITIONS];
|
||||||
unsigned long offset= 0, extbase= 0, extsize;
|
unsigned long offset= 0, extbase= 0, extsize;
|
||||||
int submerged= 0;
|
int submerged= 0;
|
||||||
char sort_index[1 + NR_PARTITIONS];
|
char sort_index[1 + NR_PARTITIONS], sort_order[1 + NR_PARTITIONS];
|
||||||
unsigned cylinders= 1, heads= 1, sectors= 1, secpcyl= 1;
|
unsigned cylinders= 1, heads= 1, sectors= 1, secpcyl= 1;
|
||||||
unsigned alt_cyls= 1, alt_heads= 1, alt_secs= 1;
|
unsigned alt_cyls= 1, alt_heads= 1, alt_secs= 1;
|
||||||
int precise= 0;
|
int precise= 0;
|
||||||
|
@ -389,21 +389,20 @@ void sort(void)
|
||||||
/* Let the sort_index array show the order partitions are sorted in. */
|
/* Let the sort_index array show the order partitions are sorted in. */
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
int idx[1 + NR_PARTITIONS];
|
|
||||||
|
|
||||||
for (i= 1; i <= NR_PARTITIONS; i++) idx[i]= i;
|
for (i= 1; i <= NR_PARTITIONS; i++) sort_order[i]= i;
|
||||||
|
|
||||||
for (i= 1; i <= NR_PARTITIONS; i++) {
|
for (i= 1; i <= NR_PARTITIONS; i++) {
|
||||||
for (j= 1; j <= NR_PARTITIONS-1; j++) {
|
for (j= 1; j <= NR_PARTITIONS-1; j++) {
|
||||||
int sj= idx[j], sj1= idx[j+1];
|
int sj= sort_order[j], sj1= sort_order[j+1];
|
||||||
|
|
||||||
if (sortbase(&table[sj]) > sortbase(&table[sj1])) {
|
if (sortbase(&table[sj]) > sortbase(&table[sj1])) {
|
||||||
idx[j]= sj1;
|
sort_order[j]= sj1;
|
||||||
idx[j+1]= sj;
|
sort_order[j+1]= sj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i= 1; i <= NR_PARTITIONS; i++) sort_index[idx[i]]= i;
|
for (i= 1; i <= NR_PARTITIONS; i++) sort_index[sort_order[i]]= i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dos2chs(unsigned char *dos, unsigned *chs)
|
void dos2chs(unsigned char *dos, unsigned *chs)
|
||||||
|
@ -1679,17 +1678,6 @@ ssize_t boot_readwrite(int rw)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bigenough(region_t *reg)
|
|
||||||
{
|
|
||||||
int sectors;
|
|
||||||
if(reg->used_part)
|
|
||||||
sectors = reg->used_part->size;
|
|
||||||
else
|
|
||||||
sectors = reg->free_sec_last - reg->free_sec_start + 1;
|
|
||||||
|
|
||||||
return sectors >= MIN_REGION_SECTORS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cylinderalign(region_t *reg)
|
int cylinderalign(region_t *reg)
|
||||||
{
|
{
|
||||||
if(reg->used_part) {
|
if(reg->used_part) {
|
||||||
|
@ -1701,7 +1689,7 @@ int cylinderalign(region_t *reg)
|
||||||
reg->used_part->size -= extra;
|
reg->used_part->size -= extra;
|
||||||
}
|
}
|
||||||
if((reg->used_part->size+1) % secpcyl) {
|
if((reg->used_part->size+1) % secpcyl) {
|
||||||
reg->used_part->size -= secpcyl - (reg->used_part->size % secpcyl);
|
reg->used_part->size -= secpcyl - ((reg->used_part->size + 1) % secpcyl);
|
||||||
}
|
}
|
||||||
return reg->used_part->size > 0;
|
return reg->used_part->size > 0;
|
||||||
}
|
}
|
||||||
|
@ -1710,9 +1698,9 @@ int cylinderalign(region_t *reg)
|
||||||
/* Start is unaligned. Round up. */
|
/* Start is unaligned. Round up. */
|
||||||
reg->free_sec_start += secpcyl - (reg->free_sec_start % secpcyl);
|
reg->free_sec_start += secpcyl - (reg->free_sec_start % secpcyl);
|
||||||
}
|
}
|
||||||
if(reg->free_sec_last % secpcyl) {
|
if((reg->free_sec_last+1) % secpcyl) {
|
||||||
/* End is unaligned. Round down. */
|
/* End is unaligned. Round down. */
|
||||||
reg->free_sec_last -= reg->free_sec_last % secpcyl;
|
reg->free_sec_last -= (reg->free_sec_last+1) % secpcyl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return nonzero if anything remains of the region after rounding. */
|
/* Return nonzero if anything remains of the region after rounding. */
|
||||||
|
@ -1744,7 +1732,7 @@ void m_read(int ev, object_t *op)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(probing) {
|
if(probing) {
|
||||||
v = HZ/2;
|
v = 2*HZ;
|
||||||
ioctl(device, DIOCTIMEOUT, &v);
|
ioctl(device, DIOCTIMEOUT, &v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1822,7 +1810,7 @@ void m_read(int ev, object_t *op)
|
||||||
/* Create region data used in autopart mode. */
|
/* Create region data used in autopart mode. */
|
||||||
free_regions = used_regions = nr_regions = nr_partitions = 0;
|
free_regions = used_regions = nr_regions = nr_partitions = 0;
|
||||||
for(si = 1; si <= NR_PARTITIONS; si++) {
|
for(si = 1; si <= NR_PARTITIONS; si++) {
|
||||||
i = sort_index[si];
|
i = sort_order[si];
|
||||||
if(i < 1 || i > NR_PARTITIONS) {
|
if(i < 1 || i > NR_PARTITIONS) {
|
||||||
printf("Sorry, something unexpected has happened (%d out of range).\n", i);
|
printf("Sorry, something unexpected has happened (%d out of range).\n", i);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1835,16 +1823,15 @@ void m_read(int ev, object_t *op)
|
||||||
regions[nr_regions].free_sec_start = free_sec;
|
regions[nr_regions].free_sec_start = free_sec;
|
||||||
regions[nr_regions].free_sec_last = table[i].lowsec-1;
|
regions[nr_regions].free_sec_last = table[i].lowsec-1;
|
||||||
regions[nr_regions].used_part = NULL;
|
regions[nr_regions].used_part = NULL;
|
||||||
if(cylinderalign(®ions[nr_regions]) &&
|
if(cylinderalign(®ions[nr_regions])) {
|
||||||
bigenough(®ions[nr_regions])) {
|
|
||||||
nr_regions++;
|
nr_regions++;
|
||||||
free_regions++;
|
free_regions++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(autopartmode && si > 1) {
|
if(autopartmode && si > 1) {
|
||||||
if(table[i].lowsec < table[sort_index[si-1]].lowsec ||
|
if(table[i].lowsec < table[sort_order[si-1]].lowsec ||
|
||||||
table[i].lowsec < table[sort_index[si-1]].lowsec + table[sort_index[si-1]].size) {
|
table[i].lowsec < table[sort_order[si-1]].lowsec + table[sort_order[si-1]].size) {
|
||||||
printf("Sanity check failed - partitions overlap.\n"
|
printf("Sanity check failed - partitions overlap.\n"
|
||||||
"Please use expert mode to correct it.\n");
|
"Please use expert mode to correct it.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1855,10 +1842,8 @@ void m_read(int ev, object_t *op)
|
||||||
free_sec = table[i].lowsec+table[i].size;
|
free_sec = table[i].lowsec+table[i].size;
|
||||||
nr_partitions++;
|
nr_partitions++;
|
||||||
|
|
||||||
if(bigenough(®ions[nr_regions])) {
|
nr_regions++;
|
||||||
nr_regions++;
|
used_regions++;
|
||||||
used_regions++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Special case: space after partitions. */
|
/* Special case: space after partitions. */
|
||||||
|
@ -1866,8 +1851,7 @@ void m_read(int ev, object_t *op)
|
||||||
regions[nr_regions].free_sec_start = free_sec;
|
regions[nr_regions].free_sec_start = free_sec;
|
||||||
regions[nr_regions].free_sec_last = table[0].lowsec + table[0].size-1;
|
regions[nr_regions].free_sec_last = table[0].lowsec + table[0].size-1;
|
||||||
regions[nr_regions].used_part = NULL;
|
regions[nr_regions].used_part = NULL;
|
||||||
if(cylinderalign(®ions[nr_regions]) &&
|
if(cylinderalign(®ions[nr_regions])) {
|
||||||
bigenough(®ions[nr_regions])) {
|
|
||||||
nr_regions++;
|
nr_regions++;
|
||||||
free_regions++;
|
free_regions++;
|
||||||
}
|
}
|
||||||
|
@ -1895,9 +1879,8 @@ void m_write(int ev, object_t *op)
|
||||||
if (bootblock[510] != 0x55 || bootblock[511] != 0xAA) {
|
if (bootblock[510] != 0x55 || bootblock[511] != 0xAA) {
|
||||||
/* Invalid boot block, warn user. */
|
/* Invalid boot block, warn user. */
|
||||||
stat_start(1);
|
stat_start(1);
|
||||||
printf("Warning: About to write a new table on %s",
|
if(!autopartmode) printf("Warning: About to write a new table on %s",
|
||||||
curdev->subname);
|
curdev->subname);
|
||||||
if(autopartmode) printf("\n");
|
|
||||||
stat_end(5);
|
stat_end(5);
|
||||||
}
|
}
|
||||||
if (extbase != 0) {
|
if (extbase != 0) {
|
||||||
|
@ -2196,8 +2179,11 @@ void mainloop(void)
|
||||||
char *
|
char *
|
||||||
prettysizeprint(int kb)
|
prettysizeprint(int kb)
|
||||||
{
|
{
|
||||||
static char str[20];
|
int toosmall = 0;
|
||||||
|
static char str[200];
|
||||||
char unit = 'k';
|
char unit = 'k';
|
||||||
|
if(MIN_REGION_SECTORS > kb*2)
|
||||||
|
toosmall = 1;
|
||||||
if(kb >= 5*1024) {
|
if(kb >= 5*1024) {
|
||||||
kb /= 1024;
|
kb /= 1024;
|
||||||
unit = 'M';
|
unit = 'M';
|
||||||
|
@ -2206,7 +2192,8 @@ prettysizeprint(int kb)
|
||||||
unit = 'G';
|
unit = 'G';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sprintf(str, "%d%cB", kb, unit);
|
sprintf(str, "%d%cB%s", kb, unit,
|
||||||
|
toosmall ? " - too small for MINIX" : "");
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2237,10 +2224,8 @@ select_region(void)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
reg = regions;
|
reg = regions;
|
||||||
printf("\nI've found the following region%s on this disk (%s).\n"
|
printf("\nI've found the following region%s on this disk (%s).\n\n",
|
||||||
"(I'm only showing ones of at least %dMB.)\n\n",
|
SORNOT(nr_regions), prettysizeprint(table[0].size/2));
|
||||||
SORNOT(nr_regions), prettysizeprint(table[0].size/2),
|
|
||||||
MIN_REGION_MB);
|
|
||||||
for(r = 0; r < nr_regions; r++, reg++) {
|
for(r = 0; r < nr_regions; r++, reg++) {
|
||||||
unsigned long units;
|
unsigned long units;
|
||||||
if(reg->used_part) {
|
if(reg->used_part) {
|
||||||
|
@ -2385,7 +2370,7 @@ select_disk(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
scribble_region(region_t *reg)
|
scribble_region(region_t *reg, struct part_entry **pe)
|
||||||
{
|
{
|
||||||
int ex, trunc = 0, changed = 0, i;
|
int ex, trunc = 0, changed = 0, i;
|
||||||
struct part_entry *newpart;
|
struct part_entry *newpart;
|
||||||
|
@ -2405,7 +2390,7 @@ scribble_region(region_t *reg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(trunc) {
|
if(trunc) {
|
||||||
printf("\nShrunk region to %dMB.\n", MAX_REGION_MB);
|
printf("\nWill only use %dMB.\n", MAX_REGION_MB);
|
||||||
}
|
}
|
||||||
if(!reg->used_part) {
|
if(!reg->used_part) {
|
||||||
for(i = 1; i <= NR_PARTITIONS; i++)
|
for(i = 1; i <= NR_PARTITIONS; i++)
|
||||||
|
@ -2420,17 +2405,19 @@ scribble_region(region_t *reg)
|
||||||
newpart->lowsec = reg->free_sec_start;
|
newpart->lowsec = reg->free_sec_start;
|
||||||
newpart->size = reg->free_sec_last - reg->free_sec_start + 1;
|
newpart->size = reg->free_sec_last - reg->free_sec_start + 1;
|
||||||
changed = 1;
|
changed = 1;
|
||||||
} else newpart = reg->used_part;
|
} else newpart = reg->used_part;
|
||||||
newpart->sysind = MINIX_PART;
|
newpart->sysind = MINIX_PART;
|
||||||
|
*pe = newpart;
|
||||||
changed = 1;
|
changed = 1;
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
do_autopart(void)
|
do_autopart(int resultfd)
|
||||||
{
|
{
|
||||||
region_t *r;
|
region_t *r;
|
||||||
|
struct part_entry *pe;
|
||||||
|
|
||||||
nordonly = 1;
|
nordonly = 1;
|
||||||
probing = 1;
|
probing = 1;
|
||||||
|
@ -2456,10 +2443,35 @@ do_autopart(void)
|
||||||
} while(!r);
|
} while(!r);
|
||||||
|
|
||||||
/* Write things. */
|
/* Write things. */
|
||||||
if(scribble_region(r)) {
|
if(scribble_region(r, &pe)) {
|
||||||
|
int i, found = -1;
|
||||||
|
char partbuf[100];
|
||||||
dirty = 1;
|
dirty = 1;
|
||||||
m_write('w', NULL);
|
m_write('w', NULL);
|
||||||
return !dirty;
|
if(dirty) return 1;
|
||||||
|
/* Retrieve partition number in sorted order that we
|
||||||
|
* have scribbled in.
|
||||||
|
*/
|
||||||
|
sort();
|
||||||
|
for(i = 1; i <= NR_PARTITIONS; i++) {
|
||||||
|
if(table[sort_order[i]].lowsec == pe->lowsec) {
|
||||||
|
if(found > 0) {
|
||||||
|
fprintf(stderr, "Internal error (1).\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
found = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(found < 1) {
|
||||||
|
fprintf(stderr, "Internal error (2).\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
sprintf(partbuf, "%sp%d\n", curdev->name, found-1);
|
||||||
|
if(resultfd >= 0 && write(resultfd, partbuf, strlen(partbuf)) < strlen(partbuf)) {
|
||||||
|
fprintf(stderr, "Couldn't write result.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2472,6 +2484,7 @@ int main(int argc, char **argv)
|
||||||
struct part_entry *pe;
|
struct part_entry *pe;
|
||||||
char *name;
|
char *name;
|
||||||
int autopart = 0;
|
int autopart = 0;
|
||||||
|
int resultfd = -1;
|
||||||
|
|
||||||
/* Autopilot mode if invoked as autopart. */
|
/* Autopilot mode if invoked as autopart. */
|
||||||
if(!(name = strrchr(argv[0], '/'))) name = argv[0];
|
if(!(name = strrchr(argv[0], '/'))) name = argv[0];
|
||||||
|
@ -2529,6 +2542,25 @@ int main(int argc, char **argv)
|
||||||
op= newobject(O_SIZE, OF_MOD, r, 69, 9); op->entry= pe;
|
op= newobject(O_SIZE, OF_MOD, r, 69, 9); op->entry= pe;
|
||||||
op= newobject(O_KB, OF_MOD, r, 79, 9); op->entry= pe;
|
op= newobject(O_KB, OF_MOD, r, 79, 9); op->entry= pe;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
int c;
|
||||||
|
/* autopart uses getopt() */
|
||||||
|
while((c = getopt(argc, argv, "f:")) != EOF) {
|
||||||
|
switch(c) {
|
||||||
|
case 'f':
|
||||||
|
unlink(optarg);
|
||||||
|
if((resultfd=open(optarg, O_CREAT | O_WRONLY | O_TRUNC)) < 0) {
|
||||||
|
perror(optarg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "Unknown option\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i= 1; i < argc; i++) newdevice(argv[i], 0, 0);
|
for (i= 1; i < argc; i++) newdevice(argv[i], 0, 0);
|
||||||
|
@ -2541,11 +2573,14 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(autopart) {
|
if(autopart) {
|
||||||
|
int r;
|
||||||
if (firstdev == nil) {
|
if (firstdev == nil) {
|
||||||
fprintf(stderr, "autopart couldn't find any devices.\n");
|
fprintf(stderr, "autopart couldn't find any devices.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return do_autopart();
|
r = do_autopart(resultfd);
|
||||||
|
if(resultfd >= 0) { close(resultfd); }
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstdev != nil) {
|
if (firstdev != nil) {
|
||||||
|
|
|
@ -26,70 +26,12 @@ EOF
|
||||||
while getopts '' opt; do usage; done
|
while getopts '' opt; do usage; done
|
||||||
shift `expr $OPTIND - 1`
|
shift `expr $OPTIND - 1`
|
||||||
|
|
||||||
# Installing a floppy set?
|
if [ "$USER" != root ]
|
||||||
case $# in
|
then echo "Please run setupcd as root."
|
||||||
0) # No, we're installing a skeleton system on the hard disk.
|
exit 1
|
||||||
;;
|
fi
|
||||||
1)
|
|
||||||
cd "$1" || exit
|
|
||||||
|
|
||||||
# Annoying message still there?
|
|
||||||
grep "'setup /usr'" /etc/issue >/dev/null 2>&1 && rm -f /etc/issue
|
|
||||||
|
|
||||||
if [ -t 0 ]
|
|
||||||
then
|
|
||||||
size=bad
|
|
||||||
while [ "$size" = bad ]
|
|
||||||
do
|
|
||||||
echo -n "\
|
|
||||||
What is the size of the images on the diskettes? [all] "; read size
|
|
||||||
|
|
||||||
case $size in
|
|
||||||
''|360|720|1200|1440)
|
|
||||||
;;
|
|
||||||
*) echo "Sorry, I don't believe \"$size\", try again." >&2
|
|
||||||
size=bad
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
drive=
|
|
||||||
while [ -z "$drive" ]
|
|
||||||
do
|
|
||||||
echo -n "What floppy drive to use? [0] "; read drive
|
|
||||||
|
|
||||||
case $drive in
|
|
||||||
'') drive=0
|
|
||||||
;;
|
|
||||||
[01])
|
|
||||||
;;
|
|
||||||
*) echo "It must be 0 or 1, not \"$drive\"."
|
|
||||||
drive=
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
vol -r $size /dev/fd$drive | uncompress | tar xvfp -
|
|
||||||
else
|
|
||||||
# Standard input is where we can get our files from.
|
|
||||||
uncompress | tar xvfp -
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo Done.
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Installing Minix on the hard disk.
|
# Installing Minix on the hard disk.
|
||||||
# Must be in / or we can't mount or umount.
|
|
||||||
if [ ! -f /CD ]
|
|
||||||
then
|
|
||||||
case "`pwd`" in
|
|
||||||
/?*)
|
|
||||||
echo "Please type 'cd /' first, you are locking up `pwd`" >&2
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$0" in
|
case "$0" in
|
||||||
/tmp/*)
|
/tmp/*)
|
||||||
|
@ -116,26 +58,13 @@ case $thisroot:$fdusr in
|
||||||
/dev/fd*:/dev/fd*) fdroot=$thisroot # ROOT is mounted directly
|
/dev/fd*:/dev/fd*) fdroot=$thisroot # ROOT is mounted directly
|
||||||
;;
|
;;
|
||||||
*) fdroot=$thisroot # ?
|
*) fdroot=$thisroot # ?
|
||||||
if [ -f /CD ]
|
|
||||||
then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
echo -n "\
|
|
||||||
It looks like Minix has been installed on disk already. Are you sure you
|
|
||||||
know what you are doing? [n] "
|
|
||||||
read yn
|
|
||||||
case "$yn" in
|
|
||||||
[yY]*|sure) ;;
|
|
||||||
*) exit
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo -n "\
|
echo -n "\
|
||||||
This is the Minix installation script.
|
This is the Minix installation script.
|
||||||
|
|
||||||
Note 1: If the screen blanks suddenly then hit CTRL+F3 to select \"software
|
Note 1: If the screen blanks suddenly then hit CTRL+F3 to select \"software
|
||||||
scrolling\".
|
scrolling\".
|
||||||
|
|
||||||
Note 2: If things go wrong then hit DEL and start over.
|
Note 2: If things go wrong then hit DEL and start over.
|
||||||
|
|
||||||
|
@ -157,6 +86,25 @@ echo -n "
|
||||||
Keyboard type? [us-std] "; read keymap
|
Keyboard type? [us-std] "; read keymap
|
||||||
test -n "$keymap" && loadkeys "/usr/lib/keymaps/$keymap.map"
|
test -n "$keymap" && loadkeys "/usr/lib/keymaps/$keymap.map"
|
||||||
|
|
||||||
|
echo -n "Welcome to Minix partitioning. Do you want to
|
||||||
|
follow the (A)utomatic or the e(X)pert mode? Expert mode drops
|
||||||
|
you into part to let you edit your partition table to taste.
|
||||||
|
Automatic mode is much easier, but can't handle all cases. In
|
||||||
|
cases it can't handle, it will tell you to use expert mode.
|
||||||
|
Please choose, A for Automatic, or X for Expert: "
|
||||||
|
|
||||||
|
read ch
|
||||||
|
case "$ch" in
|
||||||
|
[Aa]*) auto="1" ;;
|
||||||
|
[Xx]*) auto="" ;;
|
||||||
|
*) echo "Unrecognized response."; exit 1;
|
||||||
|
esac
|
||||||
|
|
||||||
|
primary=
|
||||||
|
|
||||||
|
if [ -z "$auto" ]
|
||||||
|
then
|
||||||
|
# Expert mode
|
||||||
echo -n "
|
echo -n "
|
||||||
Minix needs one primary partition of at about 210 MB for a full install
|
Minix needs one primary partition of at about 210 MB for a full install
|
||||||
with sources. (The full install also fits in about 180 MB, but it
|
with sources. (The full install also fits in about 180 MB, but it
|
||||||
|
@ -176,23 +124,49 @@ touch an existing partition unless you know precisely what you are doing!
|
||||||
Please note the name of the partition (e.g. c0d0p1, c0d1p3, c1d1p0) you
|
Please note the name of the partition (e.g. c0d0p1, c0d1p3, c1d1p0) you
|
||||||
make. (See the devices section in usage(8) on Minix device names.)
|
make. (See the devices section in usage(8) on Minix device names.)
|
||||||
:"
|
:"
|
||||||
read ret
|
read ret
|
||||||
|
|
||||||
primary=
|
while [ -z "$primary" ]
|
||||||
while [ -z "$primary" ]
|
do
|
||||||
do
|
part || exit
|
||||||
part || exit
|
|
||||||
|
|
||||||
echo -n "
|
echo -n "
|
||||||
Please finish the name of the primary partition you have created:
|
Please finish the name of the primary partition you have created:
|
||||||
(Just type RETURN if you want to rerun \"part\") /dev/"
|
(Just type RETURN if you want to rerun \"part\") /dev/"
|
||||||
read primary
|
read primary
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
# Automatic mode
|
||||||
|
while [ -z "$primary" ]
|
||||||
|
do
|
||||||
|
PF="/tmp/pf"
|
||||||
|
echo -n "Press return to enter the autopart tool, or DEL to abort.
|
||||||
|
:"
|
||||||
|
read ret
|
||||||
|
if autopart -f$PF
|
||||||
|
then if [ -s "$PF" ]
|
||||||
|
then
|
||||||
|
bd="`cat $PF`"
|
||||||
|
if [ -b "$bd" ]
|
||||||
|
then primary="$bd"
|
||||||
|
else echo "Funny device $bd from autopart."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Didn't find output from autopart."
|
||||||
|
fi
|
||||||
|
else echo "Autopart tool failed. Trying again."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
root=${primary}s0
|
root=${primary}s0
|
||||||
swap=${primary}s1
|
swap=${primary}s1
|
||||||
usr=${primary}s2
|
usr=${primary}s2
|
||||||
|
|
||||||
|
echo "$root $usr"
|
||||||
|
exit 1
|
||||||
|
|
||||||
hex2int()
|
hex2int()
|
||||||
{
|
{
|
||||||
# Translate hexadecimal to integer.
|
# Translate hexadecimal to integer.
|
||||||
|
@ -345,18 +319,9 @@ Copying $fdroot to /dev/$root
|
||||||
|
|
||||||
mkfs /dev/$root || exit
|
mkfs /dev/$root || exit
|
||||||
mount /dev/$root /mnt || exit
|
mount /dev/$root /mnt || exit
|
||||||
if [ -d /boot ]
|
# Running from the installation CD.
|
||||||
then
|
cpdir -vx / /mnt || exit
|
||||||
# Running from the floppy itself (or installation CD).
|
chmod 555 /mnt/usr
|
||||||
cpdir -vx / /mnt || exit
|
|
||||||
chmod 555 /mnt/usr
|
|
||||||
else
|
|
||||||
# Running from the RAM disk, root image is on a floppy.
|
|
||||||
mount $fdroot /root || exit
|
|
||||||
cpdir -v /root /mnt || exit
|
|
||||||
umount $fdroot || exit
|
|
||||||
cpdir -f /dev /mnt/dev # Copy any extra MAKEDEV'd devices
|
|
||||||
fi
|
|
||||||
|
|
||||||
# CD remnants that aren't for the installed system
|
# CD remnants that aren't for the installed system
|
||||||
rm /mnt/etc/issue /mnt/CD 2>/dev/null
|
rm /mnt/etc/issue /mnt/CD 2>/dev/null
|
||||||
|
|
Loading…
Reference in a new issue