[Tutorial][Raspbian]How to install Xiaomi USB Dongle on Raspbian - Raspberry Pi General

I recently got the Raspberry Pi 2 and wanted to use it for Media Center purposes. I also got the Xiaomi Portable USB 2.0 Powered Wi-Fi Access Point Adapter to work with the Pie, but alas, it had a different chipset (Mediatek)
which didn't work with the Pi out of the box and hence drivers needed to be built for it. I had to go through a lot of pages to sucessfully make the WiFI dongle work, and to save the trouble for others, following is a guide to do
so.
Note, this driver was built on Raspbian with kernel 3.18.14-v7+ #792 . Same process can be followed for other kernel versions.
First we need to check if the device is getting detected in Your pi. Keep the dongle dis connected from Your pi. Then do as follows:
Code:
dmesg -c
This will clear all the previous output of dmesg in memory and display it in terminal.
Now connect the dongle and run
Code:
dmesg
It should show something like this:
Code:
[ 2871.923204] usb 1-1.5: new high-speed USB device number 10 using dwc_otg
[ 2872.034659] usb 1-1.5: New USB device found, idVendor=2717, idProduct=4106
[ 2872.034685] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2872.034703] usb 1-1.5: Product: MI WLAN Adapter
[ 2872.034720] usb 1-1.5: Manufacturer: MediaTek
[ 2872.034736] usb 1-1.5: SerialNumber: 1.0
Write down the idVendor and the idProduct from here, it will be needed further.
Also run
Code:
lsusb
This will display the devices attached to the pi, and will have utput similar to following:
Code:
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 009: ID 2717:4106
There should a device with the idVendor and the idProduct we wrote down earlier, like Mine is shown in the last device.
Now this confirms that the dongle is getting detected by pi. The we can do the following steps to build the driver.
First, we need to download latest updates:
Code:
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
Then We need to take backup up of Your pi, the size of the backup will depend on the size of Your sdcard, so if it is 8GB, then the backup size would be 8GB.
First we need to recognize in where Your device is detcted. You can check it using Disk utility. It will show You the device name as sdb or sdc (You need to recognize using size)
or as mmcblok if You atach it via internal memory card reader. Let us assume that it is detected as sdb.
Then run the following command to backup.
Code:
sudo dd if=/dev/sdb of=raspbian.img bs=4M
This step can be skipped, but is recommended.
Now to build, we need some sources. We can get them as follows.
We need to create a directory in which we will be working:
Code:
mkdir src
cd src
Now You are in src folder. Then we need to download linux kernel source of raspberry pi, as this is needed to compile the driver module:
Code:
git clone --depth 1 https://github.com/raspberrypi/firmware
git clone --depth 1 https://github.com/raspberrypi/linux
This step migh be optional, as it worked for some where as it didn't for some.
In the terminal, type
Code:
uname -r | cut -c9-12
This will display a alphanumberic output something like v7+ or +v11. Remeber this because we are going to edit a file below and add it to it.
Code:
sudo nano linux/Makefile
Find the text "EXTRAVERSION = " there and then type the output of the previous command, so it will look like:
Code:
EXTRAVERSION = v7+
This step is must, else build won't work! The gcc needs to be updated for building the source, for it follow the guide from here.
or can be done as follows:
Ever needed gcc/g++ 4.8 on your wheezy? Then do
Code:
sudo nano /etc/apt/sources.list
Change content to
Code:
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi
# Source repository to add
deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
# Source repository to add
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
Add preferences file
Code:
sudo nano /etc/apt/preferences
and insert
Code:
Package: *
Pin: release n=wheezy
Pin-Priority: 900
Package: *
Pin: release n=jessie
Pin-Priority: 300
Package: *
Pin: release o=Raspbian
Pin-Priority: -10
update package list
Code:
sudo apt-get update
Install gcc/g++ 4.8 from jessie repositories
sudo apt-get install -t jessie gcc-4.8 g++-4.8
To remove gcc/g++ alternative configuration (if there is any, there is none by default)
Code:
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
Install alternatives
Code:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
Now 4.8 is your default compiler. You can verify it by
Code:
sudo gcc --version
If you want to change it, you can
Code:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
Just a few more steps to get ready for the build now:
Code:
sudo mkdir /boot/backup
sudo cp /boot/* /boot/backup/
sudo cp -r firmware/modules /lib
sudo cp -r src/firmware/boot /
sudo cp firmware/extra/Module7.symvers linux/Module.symvers
sync
sudo reboot
cd src/
sudo ln -s /home/pi/src/linux /lib/modules/$(uname -r)/build
cd linux
sudo gunzip -c /proc/config.gz > .config
sudo make oldconfig
sudo make modules_prepare
Now that we are finally done preparing the system, we need to download the source for the drivers. The one's that worked for Me and are latest can be found here.
To download and build the code:
Code:
mkdir ~/git
cd ~/git
git clone https://github.com/porjo/mt7601
cd src
This will create a git directory in your home directory and download the source code to it.
Now rememeber the idVendor and idProduct we wrote at beginning? We need to add that to a file. This need to be done so as to make the driver work with the dongle. The driver is built for the device, but since the device id is not present, the driver will not attach to the dongle.
to do so,
Code:
sudo nano common/rtusb_dev_id.c
/* module table */
USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef RT6570
{USB_DEVICE(0x148f,0x6570)}, /* Ralink 6570 */
#endif /* RT6570 */
{USB_DEVICE(0x148f, 0x7650)}, /* MT7650 */
#ifdef MT7601U
{USB_DEVICE(0x148f,0x6370)}, /* Ralink 6370 */
{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */
{USB_DEVICE(0x148f,0x760b)}, /* 360 wifi */
{USB_DEVICE(0x2a5f,0x1000)}, /* Tencent wifi QQ */
{USB_DEVICE(0x2955,0x0001)}, /* XiaoDu Wifi */
{USB_DEVICE(0x2955,0x1001)}, /* XiaoDu Wifi */
{USB_DEVICE(0x2955,0x1003)}, /* nuomi wifi */
#endif /* MT7601U */
{ }/* Terminating entry */
};
INT const rtusb_usb_id_len = sizeof(rtusb_dev_id) / sizeof(USB_DEVICE_ID);
MODULE_DEVICE_TABLE(usb, rtusb_dev_id);
Add the device details in the MT7601U block, so it will look like below:
/* module table */
USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef RT6570
{USB_DEVICE(0x148f,0x6570)}, /* Ralink 6570 */
#endif /* RT6570 */
{USB_DEVICE(0x148f, 0x7650)}, /* MT7650 */
#ifdef MT7601U
{USB_DEVICE(0x148f,0x6370)}, /* Ralink 6370 */
{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */
{USB_DEVICE(0x148f,0x760b)}, /* 360 wifi */
{USB_DEVICE(0x2a5f,0x1000)}, /* Tencent wifi QQ */
{USB_DEVICE(0x2955,0x0001)}, /* XiaoDu Wifi */
{USB_DEVICE(0x2955,0x1001)}, /* XiaoDu Wifi */
{USB_DEVICE(0x2955,0x1003)}, /* nuomi wifi */
{USB_DEVICE(0x2717,0x4106)}, /* Xiaomi WiFi */
#endif /* MT7601U */
{ }/* Terminating entry */
};
INT const rtusb_usb_id_len = sizeof(rtusb_dev_id) / sizeof(USB_DEVICE_ID);
MODULE_DEVICE_TABLE(usb, rtusb_dev_id);
Now to finally build the driver, run :
Code:
sudo make
After the building is complete, run following command to load the module to make it work with the dongle:
Code:
sudo insmod /home/pi/git/mt7601/src/os/linux/mt7601Usta.ko
To check if the module has been loaded, run:
Code:
lsmod
the output should be like:
Module Size Used by
mt7601Usta 583863 0
Now if the module loads successfully and is shown in lsmod, do:
Code:
sudo make install
This will install the driver for the dongle and load it automatically at boot.
To check if the device is working properly, run following various commands. The device is recognised as ra0.
Code:
iwconfig
Output:
ra0 Ralink STA ESSID:"11n-AP" Nickname:"MT7601STA"
Mode:Auto Frequency=2.412 GHz Access Point: Not-Associated
Bit Rate:1 Mb/s
RTS thrff Fragment thrff
Link Quality=10/100 Signal level:0 dBm Noise level:0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
lo no wireless extensions.
eth0 no wireless extensions.
Code:
ip link
Output:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether ##:##:##:##:##:## brd ff:ff:ff:ff:ff:ff
3: ra0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 1000
link/ether ##:##:##:##:##:## brd ff:ff:ff:ff:ff:ff
Also, You can search the WiFi networks by tunning command:
Code:
sudo iwlist ra0 scan
Now we need to configure the pi and the dongle to connect to a specific WiFi. To do so:
edit the /etc/network/interfaces
Code:
sudo nano /etc/network/interfaces
Code:
allow-hotplug ra0
iface ra0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
The first line is used to enable the dongle on connecting it. The second one sets it to set it's network to dhcp, so as to acquire ip address configuration automatically. The third one sets where the device should look for WiFi details.
Now edit the file as below:
Code:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
and add
Code:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WiFi_name"
psk="password"
}
And reboot! Done!
If You are on Raspbian with kernel version 3.18.14-v7-792, then You can directly use the following driver, no need to compile as above.
Note: It renames ra0 to wa0.
Download driver from here.
Then run the following code:
Code:
tar xzf mt7601-3.18.14-v7-792.tar.gz
./install.sh
Credits go to various people for their online help and sources!
Sources:
Raspberry Pi 2, module compiles, but failes to load #18
GCC 4.8 ON RASPBERRY PI WHEEZY
Driver Sources
MediaTek MT7601 USB WIFI on the Raspberry Pi

how to install on windows 10? thanks..

Related

[Q] Linux (Ubuntu) & Honeycomb 3.2 usb

Lots of instructions both here and on the Ubuntu forums.
Nothing seems to work for me. I want to connect my Acer A500 to
a pc running linux. Things work fine on Windows XP with the Acer Driver.
added mtp support to ubuntu and a host gmtp I haven't tried usb rule setup
Should the Tablet be in USB debug mode or not?
Any help appreciated. Things seem to have change since May when most of the posts appeared.
Bob
I tested this way with 3.2 a couple of hours ago. Works fine.
1. Install mtpfs
Code:
sudo apt-get install mtpfs
2. In the tablet, go to Settings->Applications->Development and turn USB Debugging on (check the box).
3. Plug your USB cable into the tablet and your Ubuntu machine.
4. Press Ctrl+Alt+t to open console
5. execute lsusb
Code:
lsusb
6. In the result find the line
Code:
Bus 001 Device 005: ID 0502:3325 Acer, Inc.
It tells you that your vendor id is 0502
7. Disconnect the USB cable
8. Edit the file /etc/udev/rules.d/51-android.rules
Code:
sudo nano /etc/udev/rules.d/51-android.rules
you need to add this line (Note, the vendor id is one that has been got on step 6):
SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666"
Click to expand...
Click to collapse
9. Create a mount point as root and set your user as its owner
Code:
sudo mkdir /media/a500
sudo chown [B]username:groupname[/B] /media/a500
username:groupname is your username and his primary group name
for me it was deo:users
10. Change your fstab:
Code:
sudo nano /etc/fstab
to the very end add
# mount point for Acer A500
mtpfs /media/a500 fuse user,noauto,allow_other 0 0
Click to expand...
Click to collapse
11. change fuse.conf:
Code:
sudo nano /etc/fuse.conf
here you need to uncomment the line
#user_allow_other
Click to expand...
Click to collapse
should become
user_allow_other
Click to expand...
Click to collapse
12. Add yourself to the fuse group
Code:
sudo usermod -a -G fuse [B]username[/B]
username is your username
13. Reboot.
Mountpoint appears in Nautilus (and on Desktop as well)
don't forget to unmount the device before unplugging the cable

[Guide] Building CyanogenMod 7 (CM7) on Mac OSX Lion

This is a guide to build your own CM7 on Mac OSX Lion. I can't guarantee 100% that this will work for everyone, but it worked for me. I want to thank Paul from Modaco, CyanogenMod team, Batista Harahap, ahbeng, and anyone else I can't remember atm.
1. Download and install Xcode, Java Mac OS X 10.5 SDK (later versions don't seem to work)
2. I recommend uninstalling existing MacPorts (using the codes below) and then install a fresh copy just to be safe.
Code:
$ sudo port -fp uninstall --follow-dependents installed
$ sudo rm -rf /opt/local /Applications/DarwinPorts /Applications/MacPorts /Library/LaunchDaemons/org.macports.* /Library/Receipts/DarwinPorts*.pkg /Library/Receipts/MacPorts*.pkg /Library/StartupItems/DarwinPortsStartup /Library/Tcl/darwinports1.0 /Library/Tcl/macports1.0 ~/.macports
3. Follow these steps below to teleport String errors at compile time
Code:
$ sudo vi /opt/local/etc/macports/sources.conf
* press ]]
* press i
* Append # at the beginning of the line
* Press Enter
* Add the following lines
Code:
file:///Users/Shared/dports
rsync://rsync.macports.org/release/ports/
* Press Esc
* Type :wq and press enter
4. Update Macports and install the necessary packages and revert gmake to 3.81 (This takes a long time)
Code:
$ sudo port selfupdate
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg e2fsprogs gsed curl libiptcdata xorg-libX* pngcrush findutils
$ sudo ln -s /opt/local/bin/gsed /opt/local/bin/sed
$ sudo ln -s /opt/local/libexec/gnubin/find /opt/local/bin/find
$ vi /opt/local/etc/macports/sources.conf
$ mkdir /Users/Shared/dports
$ cd /Users/Shared/dports
$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
$ portindex /Users/Shared/dports
$ sudo port install gmake @3.81
5. comment a line in one of Darwin’s C Library to get rid of compile time errors
Code:
$ sudo vi /usr/include/string.h
* Press :143
* Press i
* Append //
* Press Esc
* Type :wq!
* Press enter
6. Add a symlink for 10.5 SDKs
Code:
$ sudo ln -s /Developer/SDKs/MacOSX10.6.sdk /Developer/SDKs/MacOSX10.5.sdk
7. Create a sparseimage with a Case Sensitive FS
a. Open the Disk Utility (/Applications/Utilities/Disk Utility.app).
b. Click on New Image.
c. Save as "cyanogenmod.sparseimage" and set the following parameters as followed:
d. Name: "cyanogenmod"
e. Size: 15 GB is minimum recommended (A sparseimage will save unused space)
f. Format: Mac OS Extended (CASE-SENSITIVE, Journaled)
g. Encryption: none, Partition- Single Apple Partition Map
h. Image Format: Sparse Disk Image (this will save you disk space)
i. Save this wherever you like, and then double-click the sparseimage file to mount.
j. Your workspace will be: /Volumes/cyanogenmod/
8. Macports version of e2fsprogs will fail to compile, download the source and compile it yourself
Code:
$ mkdir -p ~/src
$ cd ~/src
$ git clone http://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
$ cd e2fsprogs
$ ./configure --prefix=/opt/local
$ make -j4 && sudo make install
9. Set up the pre-requisites for CyanogenMod to compile, there are
Code:
$ cd /Volumes/cyanogenMod
$ mkdir -p bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > bin/repo
$ chmod a+x bin/repo
$ mkdir -p android/system/
$ PATH=${PATH}:/Volumes/cyanogenmod/bin:
$ echo "PATH=\${PATH}:/Volumes/cyanogenmod/bin:" >> ~/.profile
10. Clone CyanogenMod repository into our sparse image (This takes a long time)
Code:
$ cd /Volumes/cyanogenmod/android/system
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
$ repo sync
11. Now to get all closed source binaries from the device and into our device build folder (replace *company* and *model* with the device you want e.g. /lge/p990)
Code:
$ cd /Volumes/cyanogenmod/android/system/device/*company*/*model*
$ ./extract-files.sh
12. ROMManager is a requirement for CyanogenMod
Code:
$ /Volumes/cyanogenmod/android/system/vendor/cyanogen/get-rommanager
13. edit cm source to make it compile on lion
Add lines in red to android/system/external/elfutils/config-compat-darwin.h:
Code:
[COLOR="Red"]#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070
[/COLOR]
static inline size_t strnlen (const char *__string, size_t __maxlen)
{

int len = 0;
while (__maxlen-- && *__string++)
len++;

return len;
}
[COLOR="red"]#endif[/COLOR]
Comment out every line in android/system/external/qemu/Android.mk:
Code:
# the following test is made to detect that we were called
# through the 'm' or 'mm' build commands. if not, we use the

# standard QEMU Makefile
#
#ifeq ($(DEFAULT_GOAL),droid)
# LOCAL_PATH:= $(call my-dir)
# include $(LOCAL_PATH)/Makefile.android
#else
# include Makefile.qemu
#endif
14. Now here comes the real fun, let’s compile CyanogenMod. (replace *model* with the device you want e.g. cyanogen_p990)
Code:
$ cd /Volumes/gingerbread/android/system/
$ cp ./vendor/cyanogen/products/cyanogen_*model*.mk ./buildspec.mk
$ . build/envsetup.sh
$ lunch cyanogen_*model*-eng
$ make -j`sysctl -an hw.logicalcpu` bacon
If the build was successful, there should be an update-cm-X.X.X-RC0-KANG-signed.zip in the /android/system/out/target/product/*model* folder.
If you were successful, go get yourself a treat.

[GUIDE] Building CyanogenMod 9 from Source with openSuSE 12.1

Introduction
If you have tried to build Android on systems other than Ubuntu (or Ubuntu based systems) you may have noticed, that there are pretty much no guides for other systems.
I finally set up my openSuSE to build CM9 successfully, and would like to share the process with you.
I will also try to adopt this guide for CM10 if i find the time.
If you find mistakes feel free to post them here or PM me.
Contents
Requirements
About this guide
Install "Oracle JDK"
Install other needed packages
Install "make 3.81"
Install "Android SDK"
Set up source directories
Set up "repo"
Set up repositories
Update source code
Update device specific source code
Copy proprietary files
Download prebuilts
Build CyanogenMod 9
Done!
Possible build errors on openSuSE
Credits
1. Requirements
openSuSE 12.1 64bit (may work on other versions too)
a good internet connection
as much RAM as possible (at least 2GB to finish a build, but that will take very, very long.)
patience
common sense
Note: I did all this in a virtual machine, but i highly recommend installing Linux on your hardware. Building Android takes a long time even on high end hardware.
2. About this guide
Lines beginning with '$' are supposed to be entered in shell (without the $ sign).
File names are bold.
This guide assumes that you set up the sources at ~/android/system/. Feel free to change that.
bacon = device name (e.g. i9300 for Samsung Galaxy SIII I9300. See CyanogenMod Homepage for other devices.)
3. Install "Oracle JDK"
Download latest jdk-6uXX-linux-x64-rpm.bin from http://www.oracle.com/technetwork/java/javase/downloads/jdk6-downloads-1637591.html
$ <downloadfolder>/jdk-6uXX-linux-x64-rpm.bin -x
Open <downloadfolder> in your file manager
Right click jdk-6uXX-linux-x64-rpm -> open with -> Install Software
YaST Software Manager will open up.
DON'T click accept yet.
Search for openJDK and check uninstall for ALL openJDK packages.
DON'T click accept yet, go to next chapter.
4. Install other needed packages
Search and install following packages with YaST
git
gnupg
flex
bison
gperf
SDL-devel
esound-devel
wxGTK-devel
zip
curl
ncurses-devel
ncurses-devel 32bit
zlib-devel
zlib-devel 32bit
gcc-c++
glibc-devel 32bit
libstdc++ 32bit
mesa libs
Now click accept.
5. Install "make 3.81"
Note: Other versions won't work.
Download source from http://ftp.gnu.org/gnu/make/make-3.81.tar.gz.
Extract downloaded file.
$ cd <extracted folder>
$ ./configure
$ make
$ make install
6. Install "Android SDK"
Note: This is pretty straightforward. I will add this section later.
7. Set up source directories
$ mkdir ~/android
$ mkdir ~/android/system
$ mkdir ~/android/cache
8. Set up "repo"
Note: "repo" is a tool by Google, created to make access to git and gerrit very, very easy.
$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
Open ~/.bashrc in a file editor (e.g. kwrite)
Add the following line:
PATH=~/bin:$PATH
Save and close.
Close your shell and re-open it.
9. Set up repositories
$ cd ~/android/system
$ repo init -u git://github.com/CyanogenMod/android.git -b ics
10. Update source code
$ cd ~/android/system
$ repo sync -jX
X = number of connections. Try X = 1 if there are problems downloading.
This will take a while.
11. Update device specific source code
$ cd ~/android/system
$ . build/envsetup.sh && breakfast bacon
12. Copy proprietary files
Note: This only needs to be run once. You will need CyanogenMod 9 running on the device you are building for to complete this.
Connect the phone via USB.
Install USB drivers to get ADB access.
$ cd ~/android/system/device/<manufacturer>/<devicename>
$ ./extract-files.sh
13. Download prebuilts
$ ~/android/system/vendor/cm/get-prebuilts
14. Build CyanogenMod 9
$ ~/android/system
$ . build/envsetup.sh && brunch bacon
15. Done!
You now should have a CWM-flashable .zip file ~/android/system/out/target/product/maguro/cm-9-XXXXX-UNOFFICIAL-bacon.zip.
16. Possible build errors on openSuSE
Because Ubuntu is based on Debian and openSuSE is based on Slackware, you will probable get some build errors. In post 2 is a list of errors that can occur and how to fix them.
Credits
CyanogenMod Team
CyanogenMod Wiki
The Software Rouge (http://thesoftwarerogue.blogspot.de/2011/11/building-android-ics-ice-cream-sandwich.html)
Note: I got the fixes for build errors from some page in Google Groups. I can't find it anymore. If someone finds it, please PM me.
Possible build errors on openSuSE
Note: I used kwrite as text editor. To use another, just change kwrite to whatever editor you want to use.
Note: Open shell and got to ~/android/system
Error 1
make gets killed at some point
Fix: you need more RAM to finish the build.
Error 2
Code:
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<android::String8, android::sp<AaptDir> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] Error 1
Fix:
$ kwrite frameworks/base/tools/aapt/Android.mk
Add '-fpermissive' to line 31:
LOCAL_CFLAGS += -Wno-format-y2k -fpermissive
Error 3
Code:
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<android::String8, android::wp<android::AssetManager::SharedZip> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/AssetManager.o] Error 1
Fix:
$ kwrite frameworks/base/libs/utils/Android.mk
Add '-fpermissive' to line 64:
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
Error 4
Code:
external/srec/tools/thirdparty/OpenFst/fst/lib/cache.h:136:11: note: use ‘this->SetState’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o] Error 1
Fix:
$ cd external/srec
$ wget "https://github.com/CyanogenMod/android_external_srec/commit/4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff"
$ patch -p1 < 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
$ rm -f 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
$ cd ../..
Error 5
Code:
development/tools/emulator/opengl/host/tools/emugen/main.cpp:79:9: error: ‘optind’ was not declared in this scope
development/tools/emulator/opengl/host/tools/emugen/main.cpp:92:45: error: ‘optind’ was not declared in this scope
make: *** [out/host/linux-x86/obj/EXECUTABLES/emugen_intermediates/main.o] Error 1
Fix:
$ kwrite development/tools/emulator/opengl/host/tools/emugen/main.cpp
Add '#include <getopt.h>' to list of includes:
#include <getopt.h>
Error 6
Code:
host C++: liboprofile_pp <= external/oprofile/libpp/arrange_profiles.cpp
In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] Error 1
Fix:
$ kwrite external/oprofile/libpp/format_output.h
Remove 'mutable' from 'mutable counts_t & counts;' on line 94:
counts_t & counts;
Error 7
Code:
development/tools/emulator/opengl/shared/OpenglCodecCommon/GLSharedGroup.cpp:345:65: required from here
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<unsigned int, ShaderData*>’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libOpenglCodecCommon_intermediates/GLSharedGroup.o] Error 1
Fix:
$ kwrite development/tools/emulator/opengl/Android.mk
Add '-fpermissive' to line 25:
EMUGL_COMMON_CFLAGS := -DWITH_GLES2 -fpermissive
Error 8
Code:
/usr/bin/ld: note: 'XInitThreads' is defined in DSO /lib/libX11.so.6 so try adding it to the linker command line
/lib/libX11.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer] Error 1
Fix:
$ kwrite development/tools/emulator/opengl/host/renderer/Android.mk
Add new entry 'LOCAL_LDLIBS += -lX11' after line 6 as shown:
LOCAL_SRC_FILES := main.cpp
LOCAL_CFLAGS += -O0 -g
LOCAL_LDLIBS += -lX11
#ifeq ($(HOST_OS),windows)
#LOCAL_LDLIBS += -lws2_32
Error 9
Code:
external/llvm/include/llvm/ADT/PointerUnion.h:56:10: error: enumeral mismatch in conditional expression: ‘llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Stmt*, const clang::Type*> >::<anonymous enum>’ vs ‘llvm::PointerLikeTypeTraits<clang::eek:bjCInterfaceDecl*>::<anonymous enum>’ [-Werror]
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs.o] Error 1
Fix:
$ kwrite frameworks/compile/slang/Android.mk
Remove '-Werror' from line 22:
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
Error 10
Code:
frameworks/base/libs/rs/rsFont.cpp:224:76: required from here
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base ‘android::KeyedVector<unsigned int, android::renderscript::Font::CachedGlyphInfo*>’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h:193:31: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libRS_intermediates/rsFont.o] Error 1
Fix:
$ kwrite frameworks/base/libs/rs/Android.mk
Add '-fpermissive' to line 183:
LOCAL_CFLAGS += -Werror -Wall -Wno-unused-parameter -Wno-unused-variable -fpermissive
Error 11
Code:
external/mesa3d/src/glsl/linker.cpp:1394:49: error: expected primary-expression before ‘,’ token
......
external/mesa3d/src/glsl/linker.cpp:1734:59: error: ‘offsetof’ was not declared in this scope
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o] Error 1
Fix:
$ kwrite external/mesa3d/src/glsl/linker.cpp
Add '#include <stddef.h>' to list of includes as shown:
#include <climits>
#include <stddef.h>
#include <pixelflinger2/pixelflinger2_interface.h>
Error 12
Code:
external/gtest/src/../include/gtest/gtest-param-test.h:287:58: note: ‘template<class Container> testing::internal::ParamGenerator<typename Container::value_type> testing::ValuesIn(const Container&)’ declared here, later in the translation unit
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libgtest_host_intermediates/gtest-all.o] Error 1
Fix 1:
$ kwrite external/gtest/src/Android.mk
Add '-fpermissive' to lines 52 and 70 (both lines contain same info)
LOCAL_CFLAGS += -O0 -fpermissive
Fix 2:
$ kwrite external/gtest/include/gtest/internal/gtest-param-util.h
Add '#include <stddef.h>' to list of includes as shown:
#include <vector>
#include <stddef.h>
#include <gtest/internal/gtest-port.h>
Error 13
Code:
frameworks/compile/slang/slang_rs_export_foreach.cpp: In static member function ‘static slang::RSExportForEach* slang::RSExportForEach::Create(slang::RSContext*, const clang::FunctionDecl*)’:
frameworks/compile/slang/slang_rs_export_foreach.cpp:249:23: error: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] Error 1
Fix:
$ kwrite kwrite frameworks/compile/slang/Android.mk
change
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror
to
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
reserved #2
Wish somebody would build for the LG optimistic logic
Sent from my LGL35G using xda premium

Compiling dropbear 2015.67 for Zenfone 2 (x86-64)

Hi,
This is a guide on compiling the latest (as of 2015-06-24) dropbear SSH daemon (2015.67) for the Zenfone 2 but should also work for other x86-64 architecture Android devices. The guide is mainly based off the work from the blog http://blog.xulforum.org/index.php?post/2013/12/19/Compiling-Dropbear-for-a-Nexus-7-tablet which is an excellent guide to getting an older version of dropbear running on Android devices.
I've modified the patch made by the original author to work on the latest dropbear version. There are not much changes from ver 2013.58 to 2015.67. The main difference seems to be the support for Elliptical Curve encryption.
** START DISCLAIMER **
I did not write the original codes/patch myself and have not scrutinized it for any security issues. USE IT AT YOUR OWN RISK.
** END DISCLAIMER **
Here's the list of requirements :-
1) Dropbear 2015.67 source code - dropbear-2015.67.tar.bz2 (https://matt.ucc.asn.au/dropbear/releases/dropbear-2015.67.tar.bz2)
2) Patch to compile for Android - dropbear-v67-android-patch-20150629 (https://goo.gl/LBokgG)
3) A recent Linux distro (I use Ubuntu 14.04.2 LTS) running x86-64.
4) Development tools i.e. C compiler, linker, etc... all the necessary tools to run configure, make, etc..
Steps :-
(1) Extract the source code to a directory of its own :-
Code:
tar xjf dropbear-2015.67.tar.bz2
cd dropbear-2015.67
(2) Patch the source :-
Code:
patch -p1 < dropbear-v67-android-patch-20150629
(3) Run configure :-
Code:
./configure --disable-zlib --disable-largefile --disable-loginfunc \
--disable-shadow --disable-utmp --disable-utmpx --disable-wtmp \
--disable-wtmpx --disable-pututline --disable-pututxline --disable-lastlog
(4) Run make :-
Code:
STATIC=1 MULTI=1 SCPPROGRESS=0 PROGRAMS="dropbear dropbearkey scp dbclient" make strip
(5) You should end up with a single static binary "dropbearmulti" which you should link dropbear, dbclient/ssh, dropbearkey and scp to.
Code:
./dropbear -h
Dropbear server v2015.67 [URL]https://matt.ucc.asn.au/dropbear/dropbear.html[/URL]
Usage: ./dropbear [options]
-A Android Mode, specify a user explicitly
-N Android Mode, user name
-C Android Mode, password
-R Android Mode, public key file (authorized_keys)
-U Android Mode, UID
-G Android Mode, GID
-b bannerfile Display the contents of bannerfile before user login
(default: none)
-r keyfile Specify hostkeys (repeatable)
defaults:
dss /etc/dropbear/dropbear_dss_host_key
rsa /etc/dropbear/dropbear_rsa_host_key
ecdsa /etc/dropbear/dropbear_ecdsa_host_key
-F Don't fork into background
-E Log to stderr rather than syslog
-m Don't display the motd on login
-w Disallow root logins
-s Disable password logins
-g Disable password logins for root
-B Allow blank password logins
-j Disable local port forwarding
-k Disable remote port forwarding
-a Allow connections to forwarded ports from any host
-p [address:]port
Listen on specified tcp port (and optionally address),
up to 10 can be specified
(default port is 22 if none specified)
-P PidFile Create pid file PidFile
(default /var/run/dropbear.pid)
-i Start for inetd
-W <receive_window_buffer> (default 24576, larger may be faster, max 1MB)
-K <keepalive> (0 is never, default 0, in seconds)
-I <idle_timeout> (0 is never, default 0, in seconds)
-V Version
I will assume you know what to do with the binary file generated so will not elaborate on the process.
Hope it works for you guys. I'll be happy to help out anyone who needs more details.
Cheers.
UPDATE: 2015-06-29
- I've updated the patch to fix dbclient/ssh client using password authentication.
Hi all,
For those of you using the dropbear ssh client and encountering a seg fault when using password authentication, I've fixed the patch now and it should be working.
Cheers.
wolfdude said:
I will assume you know what to do with the binary file generated so will not elaborate on the process.
Hope it works for you guys. I'll be happy to help out anyone who needs more details.
Click to expand...
Click to collapse
Ehm...
Replacing the not working dropbear binaries of ARM-oriented SSHD servers with a link to this should solve the problem discussed here ...
is it right ?!
Thanks again
Val3r10 said:
Ehm...
Replacing the not working dropbear binaries of ARM-oriented SSHD servers with a link to this should solve the problem discussed here ...
is it right ?!
Thanks again
Click to expand...
Click to collapse
In a nutshell, you will need to copy dropbearmulti to /system/xbin, create some symbolic links to it (dropbear, dropbearkey, dbclient, scp), run dropbearkey to generate your host keys, copy your client pubkey to /data/dropbear/authorized_keys and then startup dropbear with parameters like :-
Code:
dropbear -A -N root -R /data/dropbear/authorized_keys
Hope this helps.
Cheers.
wolfdude said:
[...] and then startup dropbear with parameters like :-
Hope this helps.
Click to expand...
Click to collapse
Thanks. Got that.
Actually I mean I would replace - with the symlink - the x86 binary file inside one of the above mentionned packages, i.e. QuickSSHd or SSHDroid, to make them compatible with ZE55xML...
I'm trying and reporting here

[GUIDE]Creating your own Firefox ‘Data Saver’ proxy Browser

Introduction
Hello XDA. My name’s Chris and in this guide I’ll try to show you how to set up your own independent “Data Saver” proxy similar to the one we know from Google Chrome browser. I have to warn you that the steps needed require moderate knowledge and might not be easy to follow for the beginners. It also requires setting up some software on your server (Ubuntu 16.04 in my case) prior to following this guide. You can find tutorials on how to do so in Prerequisites section below.
Prerequisites
- Server running Linux distro (Ubuntu 16.04 x64 in my case as I said above)
- Wireguard or other VPN (OpenVPN) setup on the server that is useable on your device (I’ll go with wireguard, so here’s a great tutorial to set that up: https://www.digitalocean.com/commun...t-to-point-vpn-with-wireguard-on-ubuntu-16-04 . It's pretty straightforward.)
- Machine to build (preferably gcloud or some other buildserver)
- Time
Environment
We’ll start of with installing libraries & additional tools needed to build Android itself just to make sure everything’s ready to move on later:
Code:
sudo apt-get install git ccache automake lzop bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make opting libjpeg8 libjpeg-dev openssl ssl-cert maven mercurial libnss3-tools
Okay, so that’s about it for automated install of packages. We’ll also need newest version of golang and Ubuntu repos do not provide that by default so we will install It and set work directory manually:
Code:
mkdir -p ~/golang
cd ~/golang
wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
tar -xvf go1.10.1.linux-amd64.tar.gz
sudo mv go /usr/local
mkdir -p ~/go
Now that it is installed let’s add it to our PATH environment by editing .profile:
Code:
sudo nano ~/.profile
Add these lines at the end of the file:
Code:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
Save the file and run
Code:
source ~/.profile
To refresh your env setup.
That’s it for now when it comes to your environment setup. We may be installing other packages needed in this guide later.
Installing the Proxy server
Let’s proceed to setting our proxy server that will do all the compression work we want it to. We’ll be using Compy proxy here since it supports ssl which is a must for almost all modern websites nowadays. Let’s download the source we need:
Code:
go get github.com/barnacs/compy
Now we are ready to compile our proxy server binary:
Code:
cd go/src/github.com/barnacs/compy/
go install
Our binary should be located in ~/go/bin so lets try to run it and see if it’s okay
Code:
cd ~/go/bin
./compy -help
This should print all of the arguments we can pass to our proxy. I prefer to have easy access to running it on boot without setting any paths so I’ll move my binary to /usr/bin of my server.
Code:
sudo mv compy /usr/bin
sudo chmod a+x /usr/bin/compy
Generating Self-signed Certificate & Running the Server
Since w plan on using our proxy with SSL traffic we have to provide our own SSL certificate. I just went ahead an generated self-signed to not bother myself with getting it the other way:
Code:
mkdir -p ~/keys
cd ~/keys
openssl req -x509 -newkey rsa:2048 -nodes -keyout cert.key -out cert.crt -days 36500
openssl is going to ask you a few details. Fill those in however you want as it doesn’t matter much since you will be the only one using that certificate anyway. After doing so you should have two files in your keys folder:
Code:
cert.key
cert.crt
Now you may test run compy with those keys to see if everything’s okay. I’ll run it on port 8888:
Code:
compy -host :8888 -ca ~/keys/cert.crt -cakey ~/keys/cert.key -gif false -brotli 8 -gzip 7 -jpeg 75 -png -minify
As you can see we have our keys specified twice. That’s due to workaround applied earlier, don’t worry about it. If everything’s okay you should now see something like this:
Code:
2018/04/05 09:46:49 compy listening on :8888
Since our proxy server seems to run correctly, we may also add some iptables to make it accessible only from our VPN peer address:
Code:
sudo apt-get install iptables-persistent
sudo iptables -A INPUT -p udp -s 10.0.0.0/24 --dport 8888 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 8888 -j ACCEPT
sudo iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 8888 -j DROP
sudo iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 8888 -j DROP
sudo dpkg-reconfigure iptables-persistent
From now on your proxy should be accessible only through your Wireguard VPN connection. At this point it’s safe to run our proxy in the background at system bootup. I do that via crontab:
Code:
sudo crontab -e
Add this line in the end of a file (change the settings if you want to):
Code:
@reboot compy -host :8888 -ca ~/keys/cert.crt -cakey ~/keys/cert.key -gif false -brotli 8 -gzip 7 -jpeg 75 -png -minify
Save the file and you're done with server config.
Server is ready. What now?
Now we need a way to make use of our server and that’s the moment where the fun begins. We could of course add our SSL certificate to Android system certs and try to use our proxy globally BUT that will result in most of apps refusing to connect to their services due to SSL Pinning as our MiTM proxy signs the traffic with our self-signed certificate so non-browser traffic would be essentially dead. Since I haven’t found reliable way to set proxy for individual apps nor disable SSL Pinning on Android 8.1 I had to try my luck finding browser that support proxy setup and Firefox does just that via about:config.
Here comes another problem. Firefox doesn’t use system certificate store so trying to setup our proxy there will result in “Unsafe connection” errors that won’t allow us to visit any website due to the fact the browser doesn’t trust our certificate. I also haven’t found any reliable way to add the cert into newest versions of the browser so the easiest way around that was compiling it from source with the certificate bundled in. Well, let’s go then.
Sync Fennec source
Development variant of Firefox is named Fennec. I recommend doing these steps on some build server as it will be faster than on regular machine. We will use Mercurial to download newest source. It got installed when we were setting up our Env so you can just proceed to clone the repo:
Code:
mkdir -p ~/fennec
cd ~/fennec
hg clone https://hg.mozilla.org/mozilla-central
Wait for the sync to complete. It can take a while so in the meantime we can go forward with other things.
Prepare certificate for Fennec
So we have our cert files we generated earlier used by the proxy. Now we need to convert our cert to format used by mozilla in their browser sources. First we need to convert our certificate into .der format
Code:
cd ~/keys
openssl x509 -in cert.crt -out cert.der -outform DER
Then we will convert it into certdata.txt format for us to use.
Code:
nss-addbuiltin -n ProxyCert -t "C,C,C" -i cert.der >> certdata.txt
We should get quite lengthy file certdata.txt that contains our certificate in the format needed by Fennec sources. We will add it there in a few moments.
Adding the certificate into browser source
Okay so the sync finished and our certdata is ready. Now we need to append it to file provided in Fennec sources:
Code:
cat ~/keys/certdata.txt >> ~/fennec/mozilla-central/security/nss/lib/ckfw/builtins/certdata.txt
Now our browser is ready to be built.
Building Fennec
Let’s move on to our final part: Building the browser. First let the building environment setup by itself.
Code:
cd ~/fennec/mozilla-cental
./mach bootstrap
You will be prompted with a question which version of Firefox you want to build. Naturally, I chose 4. Firefox for Android. Some additional package installs and dependencies downloads will occur at this point. This might take some time. You may need to agree to Android SDK licence and make some other chocies like Mercurial install. Choose Do not install Mercurial as we have it already. Then in another Mercurial dialogue choose No.
After the sync is complete we will get the suggested content of mozconfig file that is needed for the build:
Code:
# Build Firefox for Android:
ac_add_options --enable-application=mobile/android
ac_add_options --target=arm-linux-androideabi
# With the following Android SDK and NDK:
ac_add_options --with-android-sdk="/home/chris/.mozbuild/android-sdk-linux"
ac_add_options --with-android-ndk="/home/chris/.mozbuild/android-ndk-r15c"
Create the file with nano and paste your config there:
Code:
nano mozconfig
Now before we start the build we will need to update gcc toolchain since Ubuntu 16.04 comes with gcc 5.4 and Fennec needs at least 6.1 to build:
Code:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update
sudo apt-get install gcc-6 g++-6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6
Verify our install with gcc -v
Code:
gcc version 6.3.0 20170519 (Ubuntu/Linaro 6.3.0-18ubuntu2~16.04)
We also need to download rust toolchain for arm target and then we may start the build:
Code:
source ~/.profile
rustup target add armv7-linux-oideabi
./mach build
This will take a lot of time. On Google Cloud build took me around 50 minutes so you may take your rest now and go out for a walk/grab some coffee etc. Anyway, after it’s done run:
Code:
./mach package
To generate your new browser fennec-61.0a1.en-US.android-arm.apk file. It should be somewhere in
Code:
~/fennec/mozilla-central/ objdir-droid/dist
Copy it over to your device and install. Time for some tests.
Setting up the browser & Testing
After installing your fresh Fennec build proceed to open about:config in the address bar and setup proxy as follows (replace ip and port with the ones you used):
Code:
network.proxy.http
10.0.0.1
network.proxy.http_port
8888
network.proxy.ssl
10.0.0.1
network.proxy.ssl_port
8888
network.proxy.type
1
network.proxy.no_proxies_on
10.0.0.1
Try to load any https website while running compy proxy on your server. It should work now:
Screenshot of browser and console output
Enjoy your self-made data compressing browser. Remember to support the developers of open source software used in this guide. Perhaps later I'll attach some more screenshot of the final product.
Links & References:
Compy proxy
Wireguard
Mozilla Cert Storage Info
Hi! Thanks for the guide. I managed to compile Compy using Termux with golang.

Categories

Resources