Currently TRYING to build E for my pixel 2 walleye

Found some info, thought it could be useful.

@wilson was able to get e running on his walleye device, so I figured I would give it a shot as well.

There are 2 posts that Wilson was a part of that i was able to find, those are linked below.


He references other things in these posts as well such as;

GSI, which he was able to utilize from this post in the build process I think? LINK

vbmeta, which he says is needed for loading E on this device LINK

My goal is to gather any relevant data to the pixel 2 walleye and put it in this post. If I am able to succeed in building and deploying E to the walleye, I will continue to test future versions and contribute as much as possible.

I am not a developer, I am not a programmer, I have experience with different languages although I primarily utilize bash for relatively simple tasks. I am experienced in flashing roms and absolutely love the pixel 2 when it comes to flashability.

1 Like

1st steps taken,

Just as @wilson I was able to get Lineage loaded following the steps on this link, although I was not able to activate my Google Fi service, flashing Gapps made no difference as the apps were not there once I booted in to lineage, I had a constant esim failure error that I was not able to get around.

Throughout that whole process I have my Nas pulling and building with the following settings

sudo docker run \
-v “/DATA/e/src:/srv/src:delegated” \
-v “/DATA/e/zips:/srv/zips:delegated” \
-v “/DATA/e/logs:/srv/logs:delegated” \
-v “/DATA/e/ccache:/srv/ccache:delegated” \
-e “BRANCH_NAME=v1-pie” \
-e “DEVICE_LIST=walleye” \
-e “CUSTOM_PACKAGES=‘MuPDF GmsCore GsfProxy FakeStore com.google.android.maps.jar Mail BlissLauncher BlissIconPack MozillaNlpBackend OpenWeatherMapWeatherProvider AccountManager MagicEarth OpenCamera eDrive Weather Notes Tasks NominatimNlpBackend Light DroidGuard OpenKeychain Message Browser BrowserWebView Apps LibreOfficeViewer’” \
-e “SIGNATURE_SPOOFING=restricted” \
-e “OTA_URL=https://ota.ecloud.global/api” \
-e “REPO=https://gitlab.e.foundation/e/os/android.git” \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:latest

Took a really long time to build that, so when it got close to the end of my night I decided to put this on pause and flash back to stock rom as I need a functioning phone and functioning service for the work day.

My build has since completed, I will get to it tonight, in about 6 - 7 hours from now. I am planning to flash back to android pie, then flash back to the lineage in the post above, then I’m planning to just drop the zip of e over top as if it was an upgrade to lineage and somewhere in that process hit it with the

fastboot flash vbmeta vbmeta.img

and see what happens.

I don’t think that’s going to work though, as in one of @wilson’s posts he makes it very clear he needed to do something with GSI to get this working.

The GSI looks rather simple to build, but it confuses me how they reference that it just patches e. Without a file path to the e files, I’m not sure how it does this.

I would love any extra information, thanks fellas.

Edit ----

GSI build is going, want to make sure I have all of this finished and ready by tonight.

Hi @rhunault just noticed we need to remove the Light app from our build documentation. With it getting removed from latest builds this Docker command will fail. Also may be in the docker command we need to include a check for Xiaomi vendor blog as they are blocked at TheMuppets

Thank you for that update, I have now updated my build script as follows

sudo docker run \
-v “/DATA/e/src:/srv/src:delegated” \
-v “/DATA/e/zips:/srv/zips:delegated” \
-v “/DATA/e/logs:/srv/logs:delegated” \
-v “/DATA/e/ccache:/srv/ccache:delegated” \
-e “BRANCH_NAME=v1-pie” \
-e “DEVICE_LIST=walleye” \
-e “CUSTOM_PACKAGES=‘MuPDF GmsCore GsfProxy FakeStore com.google.android.maps.jar Mail BlissLauncher BlissIconPack MozillaNlpBackend OpenWeatherMapWeatherProvider AccountManager MagicEarth OpenCamera eDrive Weather Notes Tasks NominatimNlpBackend DroidGuard OpenKeychain Message Browser BrowserWebView Apps LibreOfficeViewer’” \
-e “SIGNATURE_SPOOFING=restricted” \
-e “OTA_URL=https://ota.ecloud.global/api” \
-e “REPO=https://gitlab.e.foundation/e/os/android.git” \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:latest

Everything so far has lead me to this

I need to find the vendor, kernel and device files for my pixel 2. I’m not sure what the specific file sets I’m looking for are.

I may have found the kernel from thislink

repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-wahoo-4.4-pie-qpr2
repo sync

Although it looks like I need to build it from here, and the build gives me an error

‘openssl/bio.h’ file not found

I imagine the other files should be somewhere on googles sites as well, I wasn’t able to find anything on github in a quick search and I was looking at the files in the aosp rom from download and I didn’t see anything named accordingly.

I’ll look in to this more tomorrow, any additional information would be greatly appreciated, especially in regards to collecting kernel, dev, vendor files. Thanks.

If your device is supported officially or unofficially by Lineage then check the name of the device maintainer. You will get that here . These maintainers maintain device related files on their Github which you can git clone on your PC for the build.

For me as well!
I’m trying to build for Mi Pad 4 Plus (clover) today, and think I need to compile these… I’m not familiar as I should be with GitHub. I think that one well-written guide for we who are not as familiar would be extremely encouraging and helpful!

There is a long standing request for a simple porting guide. I am waiting for one of the dev team members to be free to help with the documentation of the steps. He is an expert at porting devices so hope we have a document which will help a lot of users. Most probably will start work on this from next week.

1 Like

I was fortunate to get the device and kernel from this link on xda, and I was able to get the vendor files from this link

Github is actually extremely simple and amazing once you start to use it. I’ve only recently been using github for myself personally the past few months, other than that I’ve been cloning github repositories forever. This repo init stuff is new but somewhat similar. Github is just a giant text editor with advanced functionality, if I didn’t find these files, I’m not sure I ever would have thought to cross reference wahoo

I don’t have the most time throughout the day, so I’m not able to fully focus on this. I’ll update more when I have more.

Sweet! This is amazing. Thanks!

So I’ve completed my roomservice.xml and am building currently (granted there are no further errors with that).

I am using this script, all credits to @andrelam

#!/bin/bash
# https://community.e.foundation/t/howto-build-e-without-docker-for-non-lineageos-supported-devices/3991
# Install build dependencies
############################
apt -qq update
apt -qqy upgrade
apt install -y imagemagick libwxgtk3.0-dev openjdk-8-jdk
apt install -y openjdk-7-jdk
apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev python git

#install google repo
mkdir ~/bin 2>/dev/null
PATH="$HOME/bin:$PATH"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# Environment variables
#######################

export MIRROR_DIR=/DATA/buildE/src/mirror
export SRC_DIR=/DATA/buildE/src/src
export TMP_DIR=/DATA/buildE/src/tmp
export CCACHE_DIR=/DATA/buildE/src/ccache
export ZIP_DIR=/DATA/buildE/src/zips
export LMANIFEST_DIR=/DATA/buildE/src/local_manifests
export DELTA_DIR=/DATA/buildE/src/delta
export KEYS_DIR=/DATA/buildE/src/keys
export LOGS_DIR=/DATA/buildE/src/logs
export USERSCRIPTS_DIR=/DATA/buildE/src/userscripts

export DEBIAN_FRONTEND=noninteractive
export USER=root

# Configurable environment variables
####################################

# By default we want to use CCACHE, you can disable this
# WARNING: disabling this may slow down a lot your builds!
export USE_CCACHE=1

# ccache maximum size. It should be a number followed by an optional suffix: k,
# M, G, T (decimal), Ki, Mi, Gi or Ti (binary). The default suffix is G. Use 0
# for no limit.
export CCACHE_SIZE=50G

# Environment for the LineageOS branches name
# See https://github.com/LineageOS/android_vendor_cm/branches for possible options
export BRANCH_NAME='v1-pie'

# Environment for the device list (separate by comma if more than one)
# eg. DEVICE_LIST=hammerhead,bullhead,angler
export DEVICE_LIST='walleye'

# Release type string
export RELEASE_TYPE='UNOFFICIAL'

# Repo use for build
export REPO='https://gitlab.e.foundation/e/os/android.git'

# Repo use for build
export MIRROR=''

# OTA URL that will be used inside CMUpdater
# Use this in combination with LineageOTA to make sure your device can auto-update itself from this buildbot
export OTA_URL=''

# User identity
export USER_NAME='user'
export USER_MAIL=emaill@gmail.com'

# Include proprietary files, downloaded automatically from github.com/TheMuppets/
# Only some branches are supported
export INCLUDE_PROPRIETARY=true

# Mount an overlay filesystem over the source dir to do each build on a clean source
export BUILD_OVERLAY=false

# Clone the full LineageOS mirror (> 200 GB)
export LOCAL_MIRROR=false

# If you want to preserve old ZIPs set this to 'false'
export CLEAN_OUTDIR=false

# Change this cron rule to what fits best for you
# Use 'now' to start the build immediately
# For example, '0 10 * * *' means 'Every day at 10:00 UTC'
export CRONTAB_TIME='now'

# Clean artifacts output after each build
export CLEAN_AFTER_BUILD=true

# Provide root capabilities builtin inside the ROM (see http://lineageos.org/Update-and-Build-Prep/)
export WITH_SU=false

# Provide a default JACK configuration in order to avoid out-of-memory issues
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"

# Custom packages to be installed
export CUSTOM_PACKAGES='MuPDF GmsCore GsfProxy FakeStore com.google.android.maps.jar Telegram Signal Mail BlissLauncher BlissIconPack MozillaNlpBackend OpenWeatherMapWeatherProvider AccountManager MagicEarth OpenCamera eDrive Weather Notes Tasks NominatimNlpBackend Light DroidGuard OpenKeychain Message Browser BrowserWebView Apps LibreOfficeViewer'

# Sign the builds with the keys in $KEYS_DIR
export SIGN_BUILDS=false

# When SIGN_BUILDS = true but no keys have been provided, generate a new set with this subject
export KEYS_SUBJECT='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

# Move the resulting zips to $ZIP_DIR/$codename instead of $ZIP_DIR/
export ZIP_SUBDIR=true

# Write the verbose logs to $LOGS_DIR/$codename instead of $LOGS_DIR/
export LOGS_SUBDIR=true

# Apply the MicroG's signature spoofing patch
# Valid values are "no", "yes" (for the original MicroG's patch) and
# "restricted" (to grant the permission only to the system privileged apps).
#
# The original ("yes") patch allows user apps to gain the ability to spoof
# themselves as other apps, which can be a major security threat. Using the
# restricted patch and embedding the apps that requires it as system privileged
# apps is a much secure option. See the README.md ("Custom mode") for an
# example.
export SIGNATURE_SPOOFING="restricted"

# Generate delta files
export BUILD_DELTA=false

# Delete old zips in $ZIP_DIR, keep only the N latest one (0 to disable)
export DELETE_OLD_ZIPS=0

# Delete old deltas in $DELTA_DIR, keep only the N latest one (0 to disable)
export DELETE_OLD_DELTAS=0

# Delete old logs in $LOGS_DIR, keep only the N latest one (0 to disable)
export DELETE_OLD_LOGS=0

# Create a JSON file that indexes the build zips at the end of the build process
# (for the updates in OpenDelta). The file will be created in $ZIP_DIR with the
# specified name; leave empty to skip it.
# Requires ZIP_SUBDIR.
export OPENDELTA_BUILDS_JSON=''

# You can optionally specify a USERSCRIPTS_DIR volume containing these scripts:
#  * begin.sh, run at the very beginning
#  * before.sh, run after the syncing and patching, before starting the builds
#  * pre-build.sh, run before the build of every device
#  * post-build.sh, run after the build of every device
#  * end.sh, run at the very end
# Each script will be run in $SRC_DIR and must be owned and writeable only by
# root

# Create Volume entry points
############################
# VOLUME $MIRROR_DIR
# VOLUME $SRC_DIR
# VOLUME $TMP_DIR
# VOLUME $CCACHE_DIR
# VOLUME $ZIP_DIR
# VOLUME $LMANIFEST_DIR
# VOLUME $DELTA_DIR
# VOLUME $KEYS_DIR
# VOLUME $LOGS_DIR
# VOLUME $USERSCRIPTS_DIR
# VOLUME /root/.ssh

# Create missing directories
############################
mkdir -p $MIRROR_DIR
mkdir -p $SRC_DIR
mkdir -p $TMP_DIR
mkdir -p $CCACHE_DIR
mkdir -p $ZIP_DIR
mkdir -p $LMANIFEST_DIR
mkdir -p $DELTA_DIR
mkdir -p $KEYS_DIR
mkdir -p $LOGS_DIR
mkdir -p $USERSCRIPTS_DIR

# Copy build files to  /root/
############################
rm -rf $TMP_DIR/buildscripts
if [[ $BRANCH_NAME =~ pie$ ]]; then
   git clone --branch dev https://gitlab.e.foundation/e/os/docker-lineage-cicd.git $TMP_DIR/buildscripts
else
   git clone https://gitlab.e.foundation/e/os/docker-lineage-cicd.git $TMP_DIR/buildscripts
fi

cp -rf $TMP_DIR/buildscripts/src/* /root/
cp $TMP_DIR/buildscripts/apt_preferences /etc/apt/preferences

# Download and build delta tools
################################
cd /root/ && \
        mkdir delta && \
        echo "cloning"
        git clone --depth=1 https://github.com/omnirom/android_packages_apps_OpenDelta.git OpenDelta && \
        gcc -o delta/zipadjust OpenDelta/jni/zipadjust.c OpenDelta/jni/zipadjust_run.c -lz && \
        cp OpenDelta/server/minsignapk.jar OpenDelta/server/opendelta.sh delta/ && \
        chmod +x delta/opendelta.sh && \
        rm -rf OpenDelta/ && \
        sed -i -e "s|^\s*HOME=.*|HOME=/root|; \
                   s|^\s*BIN_XDELTA=.*|BIN_XDELTA=xdelta3|; \
                   s|^\s*FILE_MATCH=.*|FILE_MATCH=lineage-\*.zip|; \
                   s|^\s*PATH_CURRENT=.*|PATH_CURRENT=$SRC_DIR/out/target/product/$DEVICE|; \
                   s|^\s*PATH_LAST=.*|PATH_LAST=$SRC_DIR/delta_last/$DEVICE|; \
                   s|^\s*KEY_X509=.*|KEY_X509=$KEYS_DIR/releasekey.x509.pem|; \
                   s|^\s*KEY_PK8=.*|KEY_PK8=$KEYS_DIR/releasekey.pk8|; \
                   s|publish|$DELTA_DIR|g" /root/delta/opendelta.sh

# Set the work directory
########################
cd $SRC_DIR

# Allow redirection of stdout to docker logs
############################################
ln -sf /proc/1/fd/1 /var/log/docker.log

# Set the entry point to init.sh
################################
/root/init.sh
#end script

Although I may have gotten past this part, this ultimately will not work as I need to patch this with GSI and I am not exactly sure how to do that, although I have a couple ideas.

First, I obviously need to run the GSI patch from @Phie as I previously discussed which is located at this link and is also posted previously.

@Phie’s script downloads and builds all the files, provides the patch and then will build the rom although it does with what is in the e repositories I believe, and that will not work I do not believe.

Whereas the script I have up above in this post, is going to download and build all the files from the repositories I provided without the GSI patch.

My first thought is to replace the kernel, device, and vendor files in the manifest.xml within @Phie’s scripts.

Would that work? Or is there a better way to do this?

Attempting to update roomservice.xml from @Phie with roomservice.xml I set up in accordance with @andrelam .

my roomservice.xml reads as

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project name="GettingTechnicl/android_kernel_google_wahoo" path="kernel/google/wahoo" remote="github" />
  <project name="GettingTechnicl/android_device_google_wahoo" path="device/google/wahoo" remote="github" />
  <project name="GettingTechnicl/proprietary_vendor_google" path="device/google/walleye" remote="github" />
  <project name="LineageOS/android_packages_resources_devicesettings" path="packages/resources/devicesettings" remote="github" />
</manifest>

I get an error when building

make WITHOUT_CHECK_API=true systemimage

ninja: error: '/DATA/GSI/out/target/product/walleye/obj/HEADER_LIBRARIES/generated_kernel_headers_intermediates/export_includes', needed by '/DATA/GSI/out/target/product/walleye/obj/STATIC_LIBRARIES/libgptutils_intermediates/import_includes', missing and no known rule to make it

This is what I am hung up on currently.