cake_wallet/build-guide-linux.md
cyan 1ce60d62b3
CW-676 Add Linux scripts to build monero_c for linux platform (#1527)
* Revert "Revert btc address types"

This reverts commit a49e57e3

* Re-add Bitcoin Address types
Fix conflicts with main

* fix: label issues, clear spent utxo

* chore: deps

* fix: build

* fix: missing types

* feat: new electrs API & changes, fixes for last block scanning

* Update Monero

* not sure why it's failing

* Enable Exolix
Improve service updates indicator
New versions

* Add exolix Api token to limits api

* Ignore reporting network issues

* Change default bitcoin node

* Merge main and update linux version

* Update app version [skip ci]

* New versions

* Fix conflicts and update linux version

* minor fix

* feat: Scan Silent Payments homepage toggle

* chore: build configure

* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes

* fix: invalid Object in sendData

* feat: improve addresses page & address book displays

* feat: silent payments labeled addresses disclaimer

* fix: missing i18n

* chore: print

* feat: single block scan, rescan by date working for btc mainnet

* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert

* feat: delete silent addresses

* fix: red dot in non ssl nodes

* fix: inconsistent connection states, fix tx history

* fix: tx & balance displays, cpfp sending

* feat: new rust lib

* chore: node path

* fix: check node based on network

* fix: missing txcount from addresses

* style: padding in feature page cards

* fix: restore not getting all wallet addresses by type

* fix: auto switch node broken

* fix: silent payment txs not being restored

* update linux version

* feat: change scanning to subscription model, sync improvements

* fix: scan re-subscription

* fix: default nodes

* fix: improve scanning by date, fix single block scan

* refactor: common function for input tx selection

* various fixes for build issues

* initial monero.dart implementation

* ...

* multiple wallets
new lib
minor fixes

* other fixes from monero.dart and monero_c

* fix: nodes & build

* update build scripts
fix polyseed

* remove unnecessary code

* Add windows app, build scripts and build guide for it.

* Minor fix in generated monero configs

* Merge and fix main

* fix: send all with multiple outs

* add missing monero_c command

* add android build script

* update version

* Merge and fix main

* undo android ndk removal

* Fix modified exception_handler.dart

* Temporarily remove haven

* fix build issues

* fix pr script

* Fixes for build monero.dart (monero_c) for windows.

* monero build script

* wip: ios build script

* refactor: unchanged file

* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.

* Update monero.dart and monero_c versions.

* Add missed windows build scripts

* Update the application configuration for windows build script.

* Update cw_monero pubspec lock file for monero.dart

* Update pr_test_build.yml

* chore: upgrade

* chore: merge changes

* refactor: unchanged files [skip ci]

* Fix conflicts with main

* fix for multiple wallets

* update app version [skip ci]

* Add tron to windows application configuration.

* Add macOS option for description message in configure_cake_wallet.sh

* fix missing encryption utils in hardware wallet functions [skip ci]

* fix conflicts

* Include missed monero dll for windows.

* reformatting [skip ci]

* fix conflicts with main

* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with  for configuration script. Remove cw_shared configuration for cw_monero.

* fix: scan fixes, add date, allow sending while scanning

* add missing nano secrets file [skip ci]

* ios library

* don't pull prebuilds android

* Add auto generation of manifest file for android project even for iOS, macOS, Windows.

* remove tron

* feat: sync fixes, sp settings

* feat: fix resyncing

* store crash fix

* make init async so it won't lag
disable print starts

* fix monero_c build issues

* libstdc++

* merge main and update version

* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)

* update pubspec.lock

* fix build script

* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.

* fix: date from height logic, status disconnected & chain tip get

* fix: params

* feat: electrum migration if using cake electrum

* fix nodes
update versions

* re-enable tron

* update sp_scanner to work on iOS [skip ci]

* bump monero_c hash

* bump monero_c commit

* bump moneroc version

* bump monero_c commit

* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .

* fix: wrong socket for old electrum nodes

* update version

* Fix unchecked wallet type call

* get App Dir correctly in default_settings_migration.dart

* handle previous issue with fetching linux documents directory [skip ci]

* backup fix

* fix NTFS issues

* Add Tron
Update Linux version

* Close the wallet when the wallet gets changed

* fix: double balance

* feat: node domain

* fix: menu name

* bump monero_c commit

* fix: update tip on set scanning

* fix: connection switching back and forth

* feat: check if node is electrs, and supports sp

* chore: fix build

* minor enhancements

* fixes and enhancements

* solve conflicts with main

* Only stop wallet on rename and delete

* fix: status toggle

* minor enhancement

* Monero.com fixes

* bump monero_c commit

* update sp_scanner to include windows and linux

* merge main

* Update macOS build guide. Change brew dependencies for build unbound locally.

* fix: Tron file write, build scripts

* - merge linux with Monero Dart
- Temporarily disable Monero

* fix other issues with linux

* linux ci
fix build script

* Update pr_test_build_linux.yml

install required packages

* add linux desktop dependencies

* don't use apk in linux build releases

* don't copy the file to test-apk

* fix linux runtime issues

* remove libc++_shared.so

* fix issues with linux

* prepare both android and linux (because otherwise it will fail)

* ci script updates

* run apt update

* bump image to ubuntu 22.04
note: remember to put it down later

* bump python version

* remove some dependencies

* remove unused import

* add missing dependencies

* fix dependencies

* some fixes

* remove print [skip ci]

* Add back RunnerBase.entitlements
minor fixes [skip ci]

* fix memory leak / infinite recurrsion when opening xmr wallet

* url_launcher_linux: 3.1.1 # https://github.com/flutter/flutter/issues/153083

* fix conflicts with main

* handle walletKeysFile with encryptionUtils

* update app version [skip ci]

* add wownero [skip ci]

---------

Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
2024-08-13 01:18:14 +03:00

5.4 KiB

Building CakeWallet for Linux

Requirements and Setup

The following are the system requirements to build CakeWallet for your Linux device.

Ubuntu >= 16.04
Flutter 3.10.x

Building CakeWallet on Linux

These steps will help you configure and execute a build of CakeWallet from its source code.

1. Installing Package Dependencies

CakeWallet requires some packages to be install on your build system. You may easily install them on your build system with the following command:

$ sudo apt install build-essential cmake pkg-config git curl autoconf libtool

Warning

Check gcc version

It is needed to use gcc 10 or 9 to successfully link dependencies with flutter.
To check what gcc version you are using:

$ gcc --version
$ g++ --version

If you are using gcc version newer than 10, then you need to downgrade to version 10.4.0:

$ sudo apt install gcc-10 g++-10
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10

Note

Alternatively, you can use the nix-shell with the gcc10.nix file
present on scripts/linux like so:

$ nix-shell gcc10.nix

This will get you in a nix environment with all the required dependencies that you can use to build the software from,
and it works in any linux distro.

2. Installing Flutter

Need to install flutter. For this please check section How to install flutter on Linux.

3. Verify Installations

Verify that the Flutter have been correctly installed on your system with the following command:

$ flutter doctor

The output of this command will appear like this, indicating successful installations. If there are problems with your installation, they must be corrected before proceeding.

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.10.x, on Linux, locale en_US.UTF-8)

4. Acquiring the CakeWallet Source Code

Download CakeWallet source code

$ git clone https://github.com/cake-tech/cake_wallet.git --branch linux/password-direct-input

Proceed into the source code before proceeding with the next steps:

$ cd cake_wallet/scripts/linux/

To configure some project properties run:

$ ./cakewallet.sh

Build the Monero libraries and their dependencies:

$ ./build_all.sh

Now the dependencies need to be copied into the CakeWallet project with this command:

$ ./setup.sh

It is now time to change back to the base directory of the CakeWallet source code:

$ cd ../../

Install Flutter package dependencies with this command:

$ flutter pub get

If you will get an error like:

The plugin `cw_shared_external` requires your app to be migrated to the Android embedding v2. Follow the steps on the migration doc above and re-run
this command.

Then need to config Android project settings. For this open scripts/android ($ cd scripts/android) directory and run followed commands:

$ source ./app_env.sh cakewallet
$ ./app_config.sh
$ cd ../..

Then re-configure Linux project again. For this open scripts/linux ($cd scripts/linux) directory and run: $ ./cakewallet.sh and back to project root directory: $ cd ../.. and fetch dependecies again $ flutter pub get

Your CakeWallet binary will be built with some specific keys for iterate with 3rd party services. You may generate these secret keys placeholders with the following command:

$ flutter packages pub run tool/generate_new_secrets.dart

We will generate mobx models for the project.

$ ./model_generator.sh

Then we need to generate localization files.

$ flutter packages pub run tool/generate_localization.dart

5. Build!

$ flutter build linux --release

Path to executable file will be:

build/linux/x64/release/bundle/cake_wallet

Troubleshooting

If you got an error while building the application with $ flutter build linux --release command, add -v argument to the command ($ flutter build linux -v --release) to get details.
If you got in flutter build logs: undefined reference to hid_free_enumeration, or another error with undefined reference to hid_*, then rebuild monero lib without hidapi lib. Check does exists libhidapi-dev in your scope and remove it from your scope for build without it.

Flatpak

For package the built application into flatpak you need fistly to install flatpak and flatpak-builder:

$ sudo apt install flatpak flatpak-builder

Then need to add flathub (or just $ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo). Then need to install freedesktop runtime and sdk:

$ flatpak install flathub org.freedesktop.Platform//22.08 org.freedesktop.Sdk//22.08

To build with using of flatpak-build directory run next:

$ flatpak-builder --force-clean flatpak-build com.cakewallet.CakeWallet.yml

And then export bundle:

$ flatpak build-export export flatpak-build

$ flatpak build-bundle export cake_wallet.flatpak com.cakewallet.CakeWallet

Result file: cake_wallet.flatpak should be generated in current directory.

For install generated flatpak file use:

$ flatpak --user install cake_wallet.flatpak

For run the installed application run:

$ flatpak run com.cakewallet.CakeWallet

Copyright (c) 2023 Cake Technologies LLC.