Jump to content

[GUIDE] How to set up dualbooting for UBTouch and Lineage OS


Recommended Posts

  

Alright, after toying with it for a few days I have cracked dual booting and decided to write up the steps myself.

YOU WILL LOSE YOUR DATA DOING THIS.

Credit to @order#10248 for proving the concept.

First thing you will want to do is re-flash stock android on your phone. There isn't an official repo for this yet but @Waxberry has kindly provided one on this post.

Download and extract the files from there and run the script fastboot_all.bat or you can download my modified linux version flash_all.sh.

While that is flashing, download the latest version of Lineage here. You will need the recovery and the nightly.

Once downloaded and the flash_all script is finished, navigate to the folder with the lineage os stuff in it and run the following commands:

fastboot set_active a
fastboot flash boot_a ./lineage-18.1-xxxxxxxxx-recovery-pro1.img
fastboot erase userdata

It is important the recovery is installed on the a slot as it will install it to the b slot.

Once that is done boot into recovery, select "Apply Update -> Apply from ADB" then run this command:

adb sideload lineage-18.1-xxxxxxxx-nightly-pro1-signed.zip

Once that finishes go back to the main menu and select "Reboot system now". Once booted don't bother setting it up cause we are gonna reset it later.

reboot back into the boot loader and run these commands:

fastboot erase userdata
fastboot set_active a

Now you can run the UBports installer. Make sure that "Wipe personal data" and "Flash system partitions using fastboot" are both checked.

Once again when the device installs you will get to the set up screen, don't configure anything yet cause were wiping it again.

Boot back into your boot loader and run the following commands:

fastboot erase userdata
fastboot set_active b

Then start the system. Hopefully you will get into Lineage and now you can set stuff up. You will need to root it thou to use Swap my Slot.

You can download the magisk apk and my patched version of the boot image for lineage-18.1-20210419-magisk-22.1 and skip the below steps.

To do so you are going to want to download the script Payload Dumper. Set it up as instructed on the git and do the following:

  1. Extract the file payload.bin from lineage-18.1-xxxxxxxx-nightly-pro1-signed.zip to the same path as payload dumper.
  2. Rrun python3 payload_dumper.py ./payload.bin
  3. Navigate to the folder output and copy boot.img to your phones storage, sd or usb (in android mode)
  4. Now you have the boot img on your phone you are going to want to download and install the magisk_manager apk.
  5. Open the Magisk app and click install. It will ask you to provide the boot.img to patch.
  6. Now move the patched magisk_patched-xxxx_xxxxx.img file from your phones Downloads folder to your computer again.

Now you have a rooted version of the Lineage boot image on your pc. To flash it run the following command:

fastboot set_active b
fastboot flash boot_b ./magisk_patched-xxxxx_xxxxx.img

Now start your phone again. Open Magisk to confirm it is rooted. Now we can install the Switch my State app.

Firstly you will need to download the bootctl-binary module and install it through magisk. (The jigsaw piece  on the bottom of the app).

After it reboots you can now install the Switch My Slot.apk on android. After installing, simply open it and press the green button to switch to ubuntu.

Once back in ubuntu you can install the Switch My Slot.click or simply download it off the OpenStore.

Now you can easily switch between the

 

Hope this help. I don't check this forum too much but I will try answer questions you may have.

Important note: Lineage dose not reset the Bluetooth chip to the right RF state and UBTouch isn't  able to resolve it for whatever reason. You will need to ensure Bluetooth is off in lineage before switching to UBTouch.

Edited by Zahkc
Added note on bt state issue.
  • Like 5
  • Thanks 14
Link to post
Share on other sites

Will you have to reflash Ubuntu Touch or Lineage after an update? It was mentioned on an UBTalk that the slot switching method of dual booting is rather hacky and could give rise to issues upon updating. I'd say this is only for those that are brave of heart or like to thinker, not necessarily for usages as a daily driver.

Has anyone had issues with a similar setup? I find this solution to dual booting cool, but would also like to figure out the limits of this setup. 🙂

Link to post
Share on other sites
1 hour ago, 7rozen_7ear_ said:

Will you have to reflash Ubuntu Touch or Lineage after an update? It was mentioned on an UBTalk that the slot switching method of dual booting is rather hacky and could give rise to issues upon updating. I'd say this is only for those that are brave of heart or like to thinker, not necessarily for usages as a daily driver.

Has anyone had issues with a similar setup? I find this solution to dual booting cool, but would also like to figure out the limits of this setup. 🙂

This is an assumption but I presume you need to side load the updates each time to the correct slot instead of using auto updates.  (Also assume auto update needs to be turned off)

  • Like 1
Link to post
Share on other sites

Congratulations Zahkc for getting it done and a very big Thank You for writing this up! Excellent work, I was about to share the notes I have made while dressing up my Pro1 to get famous, but that were already some meters to scroll (thats how it felt 😉 ) ... and you nailed it down. 

My way to get to dual booting was slightly different in details. But all in all the same. Still I want to paste some additional notes here.

******************************************************************************************************************
Basic things I learned, that might enlight the guide from above a bit:

- Always use a proper USB cable to connect your phone. There are lost of cheap ones around that are only capable of charging. Check before you start if you can transfer data (i.e. a picture) from the phone.

- All fastboot commands have to be fired on a pc and with the phone connected via USB and beeing in "Bootloader Mode"

- The adb sideload commands on pc need to have the phone connected via USB and  in "Recovery Mode" - AND sideloading needs to be supported by the phone's installed recovery image.

Pro1 Bootloader Mode:       see "pro1_bootloader.jpg" attached
While the phone beeing switched off
 - press and hold "volume DOWN" and "power" simultaneously until you see a green START in the phones display.
--> I recommend to unplug USB cable (when switching off) because phone "wakes up" while charging after a while (this )
--> I recommend concentrate on the finger on the power and only release that in the moment the START appears. That might save you from unwanted system starts ...
    The other finger might than trigger other menu items, but you still beeing in "Bootloader Mode" .
    Then play with the volume buttons to cycle the available menu items. The one currently to be seen can executed with power switch. But thats not needed here.
Unfortunately there is no menu item offering to switch the slot, so you need to do that with other tools: During setup (and whenever you want) from your pc (with fastboot commands) and finally with apps from within the OSes.

The Bootloader Mode is provided by the phones "hardware". So it is always accessable, even when you did something wrong while flashing or sideloading. So don't be afraid, you can always start from here.


Pro1 Recovery Mode:   see "pro1_ubuntu_touch_recovery.jpg" and "pro1_lineageos_recovery.jpg" attached
While the phone beeing switched off
 - press and hold "volume UP" and "power" simultanously until you see something in the phones display.
   Within 30 secs (longest wait) the recovery mode should be reached, otherwise the recovery image is broken --> goto Bootloader Mode and flash a working one.

To get into recovery mode there needs to be a proper recovery image flashed. So this can possibly fail if something went worng before, but then you still have the bootloader mode for flashing the right recovery image.
There are different recovery images available, I have seen one for Ubuntu touch, stock android, LineageOS and TWRP. As a thumb rule: The image files are between 24MB and 67Mb in size and even though they are sometimes named "boot...img", they usually bring data for the boot partition AND recovery mode  ...
For setting up dual boot Ubuntu Touch and LineageOS we only need recovery mode for the adb sideload for LineageOS...zip. All the rest is done in bootloader mode or while booted in one of the OSes.
Befor sideloading files check with command "adb devices" if there is something like
  List of devices attached
  b7****08    sideload <---

With these recovery images the slot-story comes into play. For me it was sufficient to know that either slot keeps some of the partitions important for the boot process. So each slot can have its own recovery mode. Other partitions (and there are more than 50) are not separated by the slots. For example, there aren't two different partitions keeping the boot splash image ... (so that we can not have different early boot logos [a.k.a. "splash.img"] for the two OSes 😞 ) .

Usually, when installing a single OS on the phone, both slots (more correct: the separate partitions for each slot) are getting written equally. It doesn't matter which slot is active and used for booting up. I and possibly most of us never even noticed, that during an system update/upgrade the slots (precise: the other slot) become filled with different data and the curently active slot changes. From then on you boot with the other slot, until the next upgrade ...

Here we manually decide to write the slots differently so that each OS can boot up with the data from its slot partition(s) to a stage where it is able to find and load everything needed from the other partitions. In the consequence we have to say good bye to convinient ways of do system upgrades. I am preety sure that more experienced users will find out how to do that anyway ...

Helpfull command: How to check for current active slot (with fastboot and phone in Bootloader Mode)

fastboot getvar all 2>&1 | grep slot #(--> current-slot:X)

Ubuntu Touch has a lot of mountpoints to subdirs below /userdata (the userdata-image/-partition for android), see /etc/fstab . As the subdirs are different from Android default dirs, they can coexist.  


All this above might be more or less incorrect description, but it's not needed to know better for setting up dual boot.

******************************************************************************************************************

Okay, MY installation process differs from the Zahkc's way in the point, that I "started" with Ubuntu Touch installed as a/the single OS.

I wonder if the procedure to flash stock android with ext4_QX1000_user_20200825231445_dd49dd0dd1.7z is really needed. Maybe stock android has to bring a basic partition structure to the phone.
If I had to start again, I would try without. The stock android file is hard to handle, it is 1GB big itself, it extracts 3GB of files additionally and forces you to have 7zip capable software ...
Helpful command if you only want to extract single files from that 7z (example splash.img):

7z e '/path/to/ext4_QX1000_user_20200825231445_dd49dd0dd1.7z' -o/which/dir/the/file/should/be/extracted/to/ splash.img -r

Actually I had Ubuntu Touch installed as single OS AFTER my tries with stock android ... and then startet with sideloading LineageOS ...

In case you are looking for the boot/recovery-image for Ubuntu Touch, get it from here: https://cdimage.ubports.com/devices/pro1/boot.img
The link ist taken from the UBports installer config file for pro1: https://github.com/ubports/installer-configs/raw/master/v2/devices/pro1.yml (look for the lines with "url:")
The recovery mode of Ubuntu Touch does not have the functionality to receive/install sideloads.

So I flashed the LineageOS-recovery into slot A , set A active , then booted into slot A recovery (LineageOS recovery) , sideload the LOS...nightly...zip, just the same commands as Zahkc did.
Remember: The command "fastboot erase userdata" allways includes the removal of all individual/personal data you had on the phone. Maybe even for both OSes!

As I already had Ubuntu Touch installed before, I did not need to install it again. But, the original Ubuntu Touch boot/recovery partitions (in slot A) where overwritten/flashed with the LOS-recovery by me before, so this had to be corrected: Just fastboot flash boot_a /path/to/downloaded/ubuntu-touch/boot.img.

Before booting into LineageOS the very first time I decided to integrate GoogleApps via this instruction
https://wiki.lineageos.org/devices/pro1/install#installing-lineageos-from-recovery
(I took MindTheGapps arm64)


I never used Magisk before, but it is needed for root access (for app "switch my slot") in LineageOS. I installed MagisK after I had used my new LineageOS already for some time. So installation can, but has not to be done during LineageOS setup ...
I downloaded version 21.4 zip (last version available as zip)
  see https://github.com/topjohnwu/Magisk/releases
  Direct link https://github.com/topjohnwu/Magisk/releases/download/v21.4/Magisk-v21.4.zip
Magisk installation
- boot again into LinageOS recovery (yes, this is slot b 😉 )
- --> Advanced --> Enable ADB and
  --> Apply Update --> Apply from ADB
- then sideload Magisk zip file
  adb sideload /path/to/Magisk-v21.4.zip
After booting into full LineageOS there will Magisk appear between the installed apps. The app "Switch My Slot" now can get root access but still needs the bootctl module for Magisk.
See https://github.com/roihershberg/bootctl-binary/releases
Direct link v2.0: https://github.com/roihershberg/bootctl-binary/releases/download/v2.0/bootctl-binary-v2.0.zip
Download or copy it to the phone (into LineageOS).
Im Magisk tap on the "jigsaw"-icon in the lower area and then "install from storage", then install bootctl...zip. Reboot. Done!
 
Cheers, order#10148

 

pro1_bootloader.jpg

pro1_ubuntu_touch_recovery.jpg

pro1_lineageos_recovery.jpg

Edited by order#10248
  • Like 2
  • Thanks 6
Link to post
Share on other sites
Posted (edited)
18 hours ago, order#10248 said:

- then sideload Magisk zip file

Well thats a much easier way to do it 🙂

Thanks for the write up mate.

Edited by Zahkc
  • Like 2
Link to post
Share on other sites
21 hours ago, 7rozen_7ear_ said:

Will you have to reflash Ubuntu Touch or Lineage after an update? It was mentioned on an UBTalk that the slot switching method of dual booting is rather hacky and could give rise to issues upon updating. I'd say this is only for those that are brave of heart or like to thinker, not necessarily for usages as a daily driver.

Has anyone had issues with a similar setup? I find this solution to dual booting cool, but would also like to figure out the limits of this setup. 🙂

I havent tested it yet but i think updating may be possiable but not exactly easy.

In theory, if you keep the lineage recovery in slot a you should be able to sideload "OTA" updates to it without loosing data but this is of course much more tedious.

Additionally i would think that UBTouch would do live updates and wouldnt require a second slot. Not to sure but the update scheduale for the pro 1 isnt particulary often so ill let you know more once ive tested it.

Additionally, I have been using ubtouch as my daily driver and find with a little tweaking it is pretty stable. Once you patch the LTE dns issue the only real problem is the bluetooth. Im gonna dive through the source and see if theres a "shitty quick fix" i can discover and make a script to patch as many issues as I can.

 

  • Thanks 2
Link to post
Share on other sites

Lineage dose not reset the Bluetooth chip to the right RF state and UBTouch isn't  able to resolve it for whatever reason. You will need to ensure Bluetooth is off in lineage before switching to UBTouch.

  • Like 1
  • Thanks 1
Link to post
Share on other sites
2 hours ago, Zahkc said:

 

In theory, if you keep the lineage recovery in slot a you should be able to sideload "OTA" updates to it without loosing data but this is of course much more tedious.

With my understanding the "recovery image"  for Pro1 comes together with "boot image". The "boot"  is only missing in the naming of the recovery-file offered for LineageOS. The fastboot command flashes the "recovery" into "boot(_a)".
That means, as long the LineageOS-recovery.img is flashed into slot A, the boot-img-part is not the right one for Ubuntu Touch (that also resides in slot A) and Ubutnu Touch wont boot up fully. It needs to have its boot.img (re)flashed into slot A.
So instead of "keeping" I suggest temporarely flashing the LineageOS-recovery-image to slot A, boot into that slot A recovery, sideload the OTA.zip (remember: sideloading writes into tho other slot --> so slot B), and afterwards reflash the Ubuntu Touch boot.img into slot A again.

Cheers, order#10148   

Edited by order#10248
  • Like 2
  • Thanks 2
Link to post
Share on other sites
1 hour ago, Zahkc said:

Lineage dose not reset the Bluetooth chip to the right RF state and UBTouch isn't  able to resolve it for whatever reason. You will need to ensure Bluetooth is off in lineage before switching to UBTouch.

Thanks for the hint!

But that rises again the question for a wiki or something alike to keep this kind of info easy accessable.

Cheers, order#10148

  • Like 2
Link to post
Share on other sites

He, I'm gonna try it soon enough but I have a few questions about this,

1: does the user data partition will be shared between both OS or will we have to reboot to get access to some files (ex. Access pics taken from LOS while in Ubuntu) 

2: is there any possible backup in this setup or it's still a no go?

Link to post
Share on other sites

Hey @benoitjeffrey,

 

1 The data partition is accessiable through both os's but not by default. You will need to change the ownership permissions in UBTouch and use a root browser on android.

2 : As for backup i know twrp offers a great solution but I havent tested.

If you do give it a go, let me know how it goes and if you need any assistacnce.

 

~Zahkc

 

  • Like 1
Link to post
Share on other sites

Why a root browser? Why not just make a symlink or a bind mount?

Ultimately, the only requirement would be that the uids and gids match in both installs.

Edited by brunoais
  • Like 1
Link to post
Share on other sites
1 hour ago, brunoais said:

Ultimately, the only requirement would be that the uids and gids match in both installs.

Android uses a very complex scheme of virtual mount points that, in combination with SELinux, restrict access to partitions beyond what one would expect from rights management on the filesystem level.

I honestly do not understand them but I have run into those security systems multiple times in the context of running my GNU/Linux chroot aside of LineageOS. I can well imagine that also in the case under discussion here, rooting is the only way for Android Apps to access file systems touched by both OS's.

  • Like 1
  • Thanks 1
Link to post
Share on other sites

I think you need to root at the android level. However, why root at the browser app?

In other words, why the need to run the browser app with root permissions?

Edited by brunoais
Link to post
Share on other sites
21 hours ago, brunoais said:

I think you need to root at the android level. However, why root at the browser app?

In other words, why the need to run the browser app with root permissions?

I honestly cannot give a qualified answer, but I will try. Hopefully someone with more knowledge of Android will correct me and I will learn in the process:

On Android, every app runs under a separate UID. This is to ensure any specific app cannot access files written by any other app unless that other app explicitly grants system-wide access.  In a world where you expect every program on your device to spy on your data, this is supposed to enhance security. Effectively, this alone makes something like a file browser impossible: on Android, these have access only to files that belong to the GID 1023 "media_rw". For all other files, the browser needs root privilege. On top of that, SELinux enforces further access restrictions which I did not try to understand.

My experience from sharing a partition between LineageOS and a GNU/Linux chroot is that root access is necessary on the Android side to write to that file system.

Edited by claude0001
  • Like 3
Link to post
Share on other sites

Yes. You need root permissions on the OS side to set the permission values and, for example, set the same UID and GID to the same app for the equivalent app of the other OS (So both have the same UID and GID).

Wait... File browser? I thought we were talking about web browser (the usual meaning for "browser"). If it's the file browser, then consider what I mentioned moot. A proper file browser does need root privileges on android.

Link to post
Share on other sites
16 hours ago, brunoais said:

Wait... File browser?

As the discussion was about shared data storage I can only imagine that a file browser was meant.

Running a web browser as root would make no sense to me either.

  • Like 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Terms