Dualbooting: Difference between revisions

From Alpine Linux
(general warning => problem hint)
(20 intermediate revisions by 4 users not shown)
Line 1: Line 1:


Assume you have a box where you run Ubuntu or your favourite distro. Now you would like to be able to boot either your already installed system or Alpine.
It's assumed you have a box where you already run another operating system, and would like to be able to boot either the installed system or Alpine.


= Prepare your hardware =
= Prepare your hardware =
You will need a partition for your Alpine installation. If you don't already have one free, you need to create a primary partition with enough space for your Alpine installation. The tools you use for managing your partitions might differ, so you need to figure out your self how to use them. <tt>fdisk</tt> can help.
Alpine needs a separate partition where it can be installed to. If you don't already have one free, you need to create a primary partition with enough space for your Alpine installation.


Make notes of what partition you will use for your Alpine installation. In this example we are going to install Alpine on '''/dev/sda3'''.
For this, see: [[Setting_up_disks_manually#Manual_partitioning | Manual_partitioning]]


= Installing Alpine on HDD =
Make note of what partition you will use for your Alpine installation. In this example we are going to install Alpine on '''/dev/sdXY'''.
 
= Installing Alpine on an HDD partition =


Now it's time to install Alpine. Boot your system with a CD containing the latest Alpine Standard from [http://alpinelinux.org/downloads Downloads].
Now it's time to install Alpine. Boot your system with a CD containing the latest Alpine Standard from [http://alpinelinux.org/downloads Downloads].


== Format and mount HDD partition ==
== Format and mount the HDD partition ==
 
First format your partition. We will need some tools for doing the formatting. After you are done the tools can be removed.


First format your partition. We will need some tools for doing the formatting. After you are done those tools can be removed.
{{Warning|Make sure you format the right partition! The {{Path|/dev/sdXY}} is only a example. If you choose the wrong partition, your data will be gone.
Make a backup first if you are unsure.}}


{{Cmd|apk add e2fsprogs
{{Cmd|apk add e2fsprogs
mkfs.ext3 /dev/sda3
mkfs.ext4 /dev/sdXY
apk del e2fsprogs}}
apk del e2fsprogs}}


{{Warning|Make sure you format the right partition! The {{Path|/dev/sda3}} is only a example. If you choose the wrong partition your data will be gone. Make a backup first when you are unsure.}}
Then mount the newly formatted partition. After mounting, the partition will be available at {{Path|/mnt}}.
 
{{Cmd|mount -t ext4 /dev/sdXY /mnt}}
Mount the newly formatted partition. After the mounting the partition will be available at {{Path|/mnt}}.
{{Cmd|mount -t ext3 /dev/sda3 /mnt}}
 


== Basic setup ==
== Basic setup ==


This sets up alpine without installing to any disk, yet.
First, set up Alpine without installing to a disk.


To do this, either run {{Cmd|setup-alpine}}, and when to prompted "Which disks do you like to use?" make sure to answer "none", and also answer "none" to the remaining prompts, about storing configs and the apk cache directory.
To do this, either run
{{Cmd|setup-alpine}}
and when to prompted "Which disks do you like to use?" make sure to answer "none". Answer "none" to the remaining prompts about storing configs and the apk cache directory.


Alternatively, run this command selection:
Or, run this command sequence:
{{Cmd|setup-timezone
{{Cmd|setup-timezone
setup-alpine -q
setup-alpine -q
Line 41: Line 45:


<!-- If the "answerfile" functionality of setup-alpine is changed to permit specifying "-m none" for setup-disk, this sequence could be expressed more concisely.-->
<!-- If the "answerfile" functionality of setup-alpine is changed to permit specifying "-m none" for setup-disk, this sequence could be expressed more concisely.-->


== Install Alpine ==
== Install Alpine ==


Now it's time to copy the prepared system to the prepared partition(s) that where mounted below /mnt.
Now it's time to copy the prepared system to the prepared partition(s) that were mounted below /mnt.




Line 51: Line 54:


{{Cmd|setup-disk -m sys /mnt}}
{{Cmd|setup-disk -m sys /mnt}}
See [[Alpine_setup_scripts#setup-disk|setup-disk]] for more details.


{{Tip|If you use extlinux (default) and didn't create a separate boot partition, i.e. ({{Path|/boot}} resides on the root partition {{Path|/}}), you might need to adjust the paths to the boot files in {{Path|/boot/extlinux.conf}}, eg.:
{{Tip|If you use extlinux (default) and didn't create a separate boot partition, ({{Path|/boot}} resides on the root partition {{Path|/}}).
You might need to adjust the paths to the boot files in {{Path|/boot/extlinux.conf}}, eg.:
<pre>[...]
<pre>[...]
LABEL hardened
LABEL hardened
Line 61: Line 67:
[...]</pre>
[...]</pre>


Check that the <code>LINUX</code> and <code>INITRD</code> paths actually pint to the files shipped in your Alpine Linux release.
Check that the <code>LINUX</code> and <code>INITRD</code> paths actually point to the files shipped in your Alpine Linux release.
}}
}}


=== With older Alpine versions up to 2.2.3 ===
=== With older Alpine versions up to 2.2.3 ===


If using an earlier version of Alpine Linux, you'll need to install the files and [[Bootloaders|bootloader]] manually.
If you're using an earlier version of Alpine Linux, you'll need to install the files and [[Bootloaders|bootloader]] manually.


{{Tip|If using a version of Alpine Linux older than 2.2.0, replace {{Path|/etc/apk/world}} in the last line with {{Path|/var/lib/apk/world}}}}
{{Tip|If you're using a version of Alpine Linux older than 2.2.0, replace {{Path|/etc/apk/world}} in the last line with {{Path|/var/lib/apk/world}}}}


{{Cmd|lbu package - {{!}} tar -C /mnt -xzf -
{{Cmd|lbu package - {{!}} tar -C /mnt -xzf -
Line 75: Line 80:
   /etc/apk/keys $(cat /etc/apk/world) acct linux-hardened alpine-base}}
   /etc/apk/keys $(cat /etc/apk/world) acct linux-hardened alpine-base}}


Your system is now on {{Path|/dev/sda3}}. Next thing is to be able to boot on it.
Your system is now on {{Path|/dev/sdXY}}.  
 
== Configuring the bootloader ==
 
 
There are different ways to get a boot menu that allows selecting the operating system to boot.
 
It is easiest on (U)EFI based hardware platforms, where one may simply install the <code>rEFInd</code> boot menu, as explained in [[Bootloaders]].
 
 
 
Otherwise, one may adjust the bootloader that has already been installed (by the other operating system).
 


== Installing bootloader manually ==


On your system you already have a bootloader of some kind. The bootloaders vary, so you need to figure out how to make it boot your Alpine distro. Hopefully you get some ideas by looking at the following example below.
Because bootloaders vary, you'll need to figure out how to make yours boot your Alpine install.


In my case I have Grub2 so I will describe what I did to boot Alpine.
Hopefully you can get some ideas from the following example, adjusting Grub2 to boot Alpine:


Reboot your system ''(start Ubuntu)''.
Reboot your system ''(start Ubuntu)''.
Line 88: Line 104:


Take notes of the UUID of the partition you are planning to use:
Take notes of the UUID of the partition you are planning to use:
{{Cmd|sudo blkid /dev/sda3}}
{{Cmd|sudo blkid /dev/sdXY}}


Start editing grub2 configuration  
Start editing the grub2 configuration  
{{Cmd|gksudo gedit /etc/grub.d/40_custom}}
{{Cmd|gksudo gedit /etc/grub.d/40_custom}}


I edited the file so it looks something like this:
I edited the file to look something like this:
<pre>#!/bin/sh
<pre>#!/bin/sh
echo "Adding Alpine" >&2
echo "Adding Alpine" >&2
Line 99: Line 115:
menuentry "Alpine Linux" {
menuentry "Alpine Linux" {
  set root=(hd0,3)
  set root=(hd0,3)
  linux /boot/vmlinuz-hardened root=UUID=8de6973a-4a8c-40ed-b710-c4e2b42d6b7a modules=sd-mod,usb-storage,ext3 quiet
  linux /boot/vmlinuz-lts root=UUID=8de6973a-4a8c-40ed-b710-c4e2b42d6b7a modules=sd-mod,usb-storage,ext4 quiet
  initrd /boot/initramfs-hardened
  initrd /boot/initramfs-lts
}
}
EOF</pre>
EOF</pre>
{{Note|The UUID-value mentioned above '8de6973a-4a8c-40ed-b710-c4e2b42d6b7a' should be replaced with the UUID you got when running your 'blkid' command.}}
{{Note|The root, linux, initrd, and UUID values mentioned above should be replaced with those of your system, e.g. the UUID you got when running the 'blkid' command.}}
We need to tell grub2 that the config has changed
Finally the configuration changes need to be applied to the grub2 bootloader:
{{Cmd|update-grub2}}
{{Cmd|update-grub2}}


Now it's time to test. Reboot your box.
Now it's time to test. Reboot your box.
{{Note|You might need to press SHIFT when booting up your box in order to see the grub-menu.}}
{{Note|You might need to press SHIFT when booting your box in order to see the grub-menu.}}
 
== Windows ==


For Windows partitions to be detected with grub, you need `os-prober` and `grub-mount` installed at the time grub-mkconfig runs.
[[Category:Installation]]
[[Category:Installation]]

Revision as of 13:29, 6 July 2022

It's assumed you have a box where you already run another operating system, and would like to be able to boot either the installed system or Alpine.

Prepare your hardware

Alpine needs a separate partition where it can be installed to. If you don't already have one free, you need to create a primary partition with enough space for your Alpine installation.

For this, see: Manual_partitioning

Make note of what partition you will use for your Alpine installation. In this example we are going to install Alpine on /dev/sdXY.

Installing Alpine on an HDD partition

Now it's time to install Alpine. Boot your system with a CD containing the latest Alpine Standard from Downloads.

Format and mount the HDD partition

First format your partition. We will need some tools for doing the formatting. After you are done the tools can be removed.

Warning: Make sure you format the right partition! The /dev/sdXY is only a example. If you choose the wrong partition, your data will be gone. Make a backup first if you are unsure.


apk add e2fsprogs mkfs.ext4 /dev/sdXY apk del e2fsprogs

Then mount the newly formatted partition. After mounting, the partition will be available at /mnt.

mount -t ext4 /dev/sdXY /mnt

Basic setup

First, set up Alpine without installing to a disk.

To do this, either run

setup-alpine

and when to prompted "Which disks do you like to use?" make sure to answer "none". Answer "none" to the remaining prompts about storing configs and the apk cache directory.

Or, run this command sequence:

setup-timezone setup-alpine -q setup-sshd setup-ntp

See setup-alpine for more details.


Install Alpine

Now it's time to copy the prepared system to the prepared partition(s) that were mounted below /mnt.


In Alpine 2.2.3 or newer

setup-disk -m sys /mnt

See setup-disk for more details.


Tip: If you use extlinux (default) and didn't create a separate boot partition, (/boot resides on the root partition /).

You might need to adjust the paths to the boot files in /boot/extlinux.conf, eg.:

[...]
LABEL hardened
  MENU DEFAULT
  MENU LABEL Linux hardened
  LINUX /boot/vmlinuz-lts
  INITRD /boot/initramfs-lts
[...]

Check that the LINUX and INITRD paths actually point to the files shipped in your Alpine Linux release.

With older Alpine versions up to 2.2.3

If you're using an earlier version of Alpine Linux, you'll need to install the files and bootloader manually.

Tip: If you're using a version of Alpine Linux older than 2.2.0, replace /etc/apk/world in the last line with /var/lib/apk/world

lbu package - | tar -C /mnt -xzf - apk add --root /mnt --initdb --repositories-file /etc/apk/repositories --keys-dir \ /etc/apk/keys $(cat /etc/apk/world) acct linux-hardened alpine-base

Your system is now on /dev/sdXY.

Configuring the bootloader

There are different ways to get a boot menu that allows selecting the operating system to boot.

It is easiest on (U)EFI based hardware platforms, where one may simply install the rEFInd boot menu, as explained in Bootloaders.


Otherwise, one may adjust the bootloader that has already been installed (by the other operating system).


Because bootloaders vary, you'll need to figure out how to make yours boot your Alpine install.

Hopefully you can get some ideas from the following example, adjusting Grub2 to boot Alpine:

Reboot your system (start Ubuntu).

Start a 'terminal' (ALT-F2 + "terminal" + [Run])

Take notes of the UUID of the partition you are planning to use:

sudo blkid /dev/sdXY

Start editing the grub2 configuration

gksudo gedit /etc/grub.d/40_custom

I edited the file to look something like this:

#!/bin/sh
echo "Adding Alpine" >&2
cat << EOF
menuentry "Alpine Linux" {
 set root=(hd0,3)
 linux /boot/vmlinuz-lts root=UUID=8de6973a-4a8c-40ed-b710-c4e2b42d6b7a modules=sd-mod,usb-storage,ext4 quiet
 initrd /boot/initramfs-lts
}
EOF
Note: The root, linux, initrd, and UUID values mentioned above should be replaced with those of your system, e.g. the UUID you got when running the 'blkid' command.

Finally the configuration changes need to be applied to the grub2 bootloader:

update-grub2

Now it's time to test. Reboot your box.

Note: You might need to press SHIFT when booting your box in order to see the grub-menu.

Windows

For Windows partitions to be detected with grub, you need `os-prober` and `grub-mount` installed at the time grub-mkconfig runs.