-
Notifications
You must be signed in to change notification settings - Fork 23
LinuxUbuntuSetup
Everything you have to install and setup to be able to compile Redtamarin under Ubuntu.
We are installing a Linux Ubuntu Desktop 15.10 64-bit,
simply download an ISO from the Ubuntu web site.
Once the system is installed, update
$ sudo apt-get update
$ sudo apt-get upgrade
Also in "system settings / details"
check for available update
and update if necessary.
Usually you would remote control a Linux desktop using VNC,
but it is too slow, so we opted to use RDP instead (yes from Microsoft).
First, install a SSH server
$ sudo apt-get install openssh-server
now from either Windows, Mac OS X or another Linux
you can ssh from a Bash Shell
$ ssh [email protected]
.
ssh is convenient when you want to run something
without really using a GUI, like install a package, or run a build
Second, let's install a RDP server
$ sudo apt-get install xrdp
note: RDP listen on port 3389
unless you see:
Starting Remote Desktop Protocol Server [ OK ]
start the xrdp server
$ sudo /etc/init.d/xrdp start
RDP work only with a 2D desktop
and so will not work with the default Unity desktop (which is 3D).
install Mate
$ sudo apt-get install ubuntu-mate-core ubuntu-mate-desktop
Configure RDP to use a Mate session
$ echo mate-session > ~/.xsession
check the xrdp config to be sure we can reuse the session
$ sudo nano /etc/xrdp/xrdp.ini
it should be
[xrdp1]
name=sesman-Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
if port=ask
or port=ask-1
, change it to port=-1
.
now restart the server
$ sudo service xrdp restart
to verify
$ sudo /etc/init.d/xrdp status
you should obtain
* Checking status of Remote Desktop Protocol Server xrdp [ OK ]
* Checking status of RDP Session Manager sesman [ OK ]
When you will connect to this Linux from another machine using a RDP client, it may not work right from the first time, but try to reconnect a 2nd time and there it should work.
Depending on your Ubuntu version you may run into issues, check this c-nergy blog, Category: XRDP which contain lots of infos, setup etc. about xrdp config under Linux.
To remote control the machine
- from Windows 7, 8, 8.1, 10
Remote Desktop (client) is available by default - from Mac OS X install
Microsoft Remote Desktop - from Linux Ubuntu install
rdesktop
GNOME frontend for the rdesktop client
The "optional", install whatever you need as a developer like Windows Update, Google Chrome, Flash Debug version, Adobe AIR, your preferred code editor, etc.
From that point, we install what we consider the "essential", and yes it will certainly be biased toward specific tools but it's what we're going with because we know it works, if you don't install those for whatever reasons we will not be able to help or support you.
Install Google Chrome
Linux 64 bit .deb (For Debian/Ubuntu)
Install Sublime Text 2
Linux 64 bit
In the Terminal
following How to Install Sublime Text 2 on Ubuntu 14.04
- go to your download directory
$ cd ~/Downloads
- unzip it
$ tar xf Sublime\ Text\ 2.0.2\ x64.tar.bz2
- move the files into your "opt" folder
$ sudo mv Sublime\ Text\ 2 /opt/
- create a symlink so you can launch it from the Terminal
$ sudo ln -s /opt/Sublime\ Text\ 2/sublime_text /usr/bin/subl
Because we use Mate, adding a menu entry is done this way
- go into "System / Preferences / Look and Feel / main Menu"
- select "Applications"
- select "programming" (on the right) and check it
- select "programming" (on the left)
- click "New Item"
- input those infos
- name: "Sublime"
- command: "/opt/Sublime Text 2/sublime_text"
- you can double click the icon and change it
look into/opt/Sublime Text 2/Icon/48x48/
Everything is in place you already have a Terminal and a Bash Shell.
To open the Terminal, click "Applications / System Tools / MATE Terminal".
You should get a prompt looking like this
username@machine:~$
Now let's install some tools
$ sudo apt-get install tree pkg-config unzip unrar
$ sudo apt-get install automake autoconf build-essential devscripts libtool patch
$ sudo apt-get install subversion ant mercurial git-core git-svn
- Open a Terminal
- go to your home directory
$ cd ~
or$ CD $HOME
- check if you have a
.profile
$ ls -la
- if not, create a
.profile
$ touch .profile
- if not, create a
- edit it
$ nano .profile
Right at the end of the file add
...
#umask 022
export TERM=xterm-color
export force_color_prompt=yes
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
export EDITOR=nano
export CLICOLOR=1
export TERM=xterm-color
export LSCOLORS=DxFxcxdxBxegedbxHxHcHd
export LS_COLORS="di=01;33;40:ln=01;95;40:so=32;40:pi=33;40:ex=01;91;40:bd=34;46:cd=34;43:su=31;40:sg=01;97;40:tw=01;97;42:ow=01;97;43:"
To apply the changes
$ source .profile
If you don't have tree
installed
$ apt-get install tree
Now try to do a ls -la
or a tree -L 1 /usr
and you should have some nice colors in your terminal.
This is mainly about editing your .profile
to add environment variables, if you want a custom color scheme use the LSCOLORS configurator, also look at Configuring LS_COLORS and Colorizing the Terminal.
If you can not or struggle to apply such configuration you should stop here, not trying to discourage you but what's coming next is much much more complex and so maybe you should get familiar with the Bash Shell and the Terminal first (you can find tons of tutorial online).
- Open a Terminal
- edit the XRDP start script
$ sudo nano /etc/xrdp/startwm.sh
- before the line
. /etc/X11/Xsession
add
. /etc/environment
. /etc/profile
you should have something looking like
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
. /etc/environment
. /etc/profile
. /etc/X11/Xsession
If you use ssh
to connect to a remote machine,
it will read your .profile
because you "login".
But if you open the Terminal or MATE Terminal within an RDP session
your .profile
will not be read because you are already logged in,
eg. you're using a non-login interactive shell.
We define all our config etc. in the .profile
so in this case we need to load the .profile
automatically (even if not recommended)
- open a Terminal
- then "Edit / Profiles..."
- "Edit" your profile
(eg. "Default" by default) - in the tab "Title and Command"
check "Run command as a login shell" - with that each Terminal you will open
will load the.profile
by default
We need Java to run Ant and compile with the Flex SDK.
Verify if you have Java
$ java -version
Wether it is already there or not,
install the default Java SDK
$ sudo apt-get install default-jdk
At best, it will install nothing, but usually it will install some missing files or fix a half-assed install.
Test Java
$ java -version
You should obtain something like
$ java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-0ubuntu0.15.04.1)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)
Test JAVA_HOME
$ echo $JAVA_HOME
if the result is empty we need to configure our environment
But first we need to find where java is installed
$ which java
output: /usr/bin/java
$ ls -la /usr/bin/java
output: /usr/bin/java -> /etc/alternatives/java
$ ls -la /etc/alternatives/java
output: /etc/alternatives/java -> /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
- Open a Terminal
- go to your home directory
$ cd ~
or$ CD $HOME
- check if you have a
.profile
$ ls -la
- if not, create a
.profile
$ touch .profile
- if not, create a
- edit it
$ nano .profile
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
export PATH="$JAVA_HOME/bin:$PATH"
Apply the changes
$ source .profile
your .profile
should look like the following (without comments)
export TERM=xterm-color
export force_color_prompt=yes
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
export EDITOR=nano
export CLICOLOR=1
export TERM=xterm-color
export LSCOLORS=DxFxcxdxBxegedbxHxHcHd
export LS_COLORS="di=01;33;40:ln=01;95;40:so=32;40:pi=33;40:ex=01;91;40:bd=34;46:cd=34;43:su=31;40:sg=01;97;40:tw=01;97;42:ow=01;97;43:"
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
export PATH="$JAVA_HOME/bin:$PATH"
Install Ant
$ sudo apt-get install ant
Test if you can use Ant
$ ant -version
You will obtain
Apache Ant(TM) version 1.9.4 compiled on January 27 2015
All is working but for "same config everywhere" sake
$ nano ~/.profile
add the following
export ANT_HOME=/usr/share/ant/
We want to install all SDK in the /sdk
folder
and we want all Flex SDK to be in the /sdk/flex
folder
- open the Terminal
- go to the root
$ cd /
- create the directories path
$ sudo mkdir -p /sdk/flex
- make the directory and subdirectories accessible by anyone
$ sudo chmod -R 777 sdk/
Download the Adobe Flex SDK
For example: Adobe Flex 4.6 SDK
- go into our flex sdk folders
$ cd /sdk/flex
- download the Adobe Flex 4.6 SDK
$ wget http://download.macromedia.com/pub/flex/sdk/flex_sdk_4.6.zip
- unzip it into the folder "4_6"
$ unzip flex_sdk_4.6.zip -d 4_6
- do not delete "flex_sdk_4.6.zip"
we can reuse it in the future - go into the "4_6" folder
$ cd 4_6/
- test it
$ bin/mxmlc
You should get
Loading configuration file /sdk/flex/4_6/frameworks/flex-config.xml
Adobe Flex Compiler (mxmlc)
Version 4.6.0 build 23201
Copyright (c) 2004-2011 Adobe Systems, Inc. All rights reserved.
Error: a target file must be specified
Use 'mxmlc -help' for information about using the command line.
Download the Apache Flex SDK
For example: Apache Flex SDK 4.14.1 (download from OVH)
List of mirrors: mirrors Apache Flex SDK 4.14.1
- go into our flex sdk folders
$ cd /sdk/flex
- download the Apache Flex SDK 4.14.1
$ wget http://apache.mirrors.ovh.net/ftp.apache.org/dist/flex/4.14.1/binaries/apache-flex-sdk-4.14.1-bin.tar.gz
- untar it
$ tar -xvjf apache-flex-sdk-4.14.1-bin.tar.gz
- rename the folder to "4_14_1"
$ mv apache-flex-sdk-4.14.1-bin 4_14_1
- do not delete "apache-flex-sdk-4.14.1-bin.tar.gz"
we can reuse it in the future - go into the "4_14_1" folder
$ cd 4_14_1/
- complete the installation with the Ant-based installer
$ ant -f installer.xml -Dair.sdk.version=2.6
when asked questions answer "y" to all - install the
playerglobal.swc
$ mkdir -p frameworks/libs/player/11.1/
$ wget http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_1.swc -O frameworks/libs/player/11.1/playerglobal.swc
- now create some environment properties
$ touch env.properties
$ nano env.properties
add
env.PLAYERGLOBAL_HOME=/sdk/flex/4_14_1/frameworks/libs/player
- make the binary files executable
$ chmod +x bin/*
- test it
$ bin/mxmlc
You should get
Loading configuration file /sdk/flex/4_14_1/frameworks/flex-config.xml
Apache Flex Compiler (mxmlc)
Version 4.14.1 build 20150325
Copyright 2015 The Apache Software Foundation.
Error: a target file must be specified
Use 'mxmlc -help' for information about using the command line.
Find your GCC version
$ gcc --version
You should obtain something like
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
List all the GCC installed
$ dpkg -l | grep "gcc" | awk '{print $2}' | grep "gcc"
You should obtain something like
gcc
gcc-5
gcc-5-base:amd64
libgcc-5-dev:amd64
libgcc1:amd64
As you can see we have gcc v5.
We want many things
- use gcc 4.8
- support 32-bit compilation
- support 64-bit compilation
Install gcc v4.8
$ sudo apt-get install gcc-4.8
Install g++ v4.8
$ sudo apt-get install g++-4.8
Verify the versions installed
$ gcc --version
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ --version
g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ls -la /usr/bin/gcc
output: /usr/bin/gcc -> gcc-5
$ ls -la /usr/bin/g++
output: /usr/bin/g++ -> g++-5
First we erase the current update-alternatives setup for gcc and g++
$ sudo update-alternatives --remove-all gcc
$ sudo update-alternatives --remove-all g++
It's OK if you receive errors such as
update-alternatives: error: no alternatives for gcc
update-alternatives: error: no alternatives for g++
Install the alternatives
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20
$ sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
$ sudo update-alternatives --set cc /usr/bin/gcc
$ sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
$ sudo update-alternatives --set c++ /usr/bin/g++
Configure the alternatives
$ sudo update-alternatives --config gcc
$ sudo update-alternatives --config g++
It will show you a menu of different versions of gcc installed on the system, select 4.8
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-5 20 auto mode
1 /usr/bin/gcc-4.8 10 manual mode
2 /usr/bin/gcc-5 20 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/gcc-4.8 to provide /usr/bin/gcc (gcc) in manual mode
now test the versions again
$ gcc --version
gcc (Ubuntu 4.8.5-1ubuntu1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ --version
g++ (Ubuntu 4.8.5-1ubuntu1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Install the gcc v4.8 multilib
(which allow to compile for both 32-bit and 64-bit)
$ sudo apt-get install gcc-4.8-multilib
Install the g++ v4.8 multilib
(which allow to compile for both 32-bit and 64-bit)
$ sudo apt-get install g++-4.8-multilib
Optional, but for case when we need a smaller exe
let's install a packer: UPX - the Ultimate Packer for eXecutables
$ apt-get install upx
for example: with the redshell_dd 64-bit
original size: 37M redshell_dd
(38469216 bytes)
after $ strip redshell_dd
stripped size: 7.4M redshell_dd
(7683152 bytes)
after $ upx -9 redshell_dd
packed size: 1.6M redshell_dd
(1653184 bytes)
Use file
to check the exe
for example in /bin-release/linux/64/debugger/
$ file redshell_dd
result:
redshell_dd: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
for example in /bin-release/linux/32/debugger/
$ file redshell_dd
result:
redshell_dd: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
Use ldd
to check for dynamic libraries
for example in /bin-release/linux/64/debugger/
$ ldd redshell_dd
result:
linux-gate.so.1 => (0xf774c000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf770e000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7597000)
libm.so.6 => /lib32/libm.so.6 (0xf754a000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf752c000)
libc.so.6 => /lib32/libc.so.6 (0xf7374000)
/lib/ld-linux.so.2 (0x565a2000)
note:
upx
can change those results, as when you pack an exe
you create a stub which by nature is considered "statically linked"
without upx:
$ file redshell_dd
result:
redshell_dd2: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=52527e74b570a9b9036b0b7a85afec242689330f, stripped
$ ldd redshell_dd
result:
linux-gate.so.1 => (0xf774c000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf770e000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7597000)
libm.so.6 => /lib32/libm.so.6 (0xf754a000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf752c000)
libc.so.6 => /lib32/libc.so.6 (0xf7374000)
/lib/ld-linux.so.2 (0x565a2000)
with upx:
$ file redshell_dd
result:
redshell_dd: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
$ ldd redshell_dd
result:
not a dynamic executable
TODO
We want to work from a folder named "work"
- open the Terminal
- go to the root
$ cd /
- create the directory "work"
$ sudo mkdir work
- make the directory and subdirectories accessible by anyone
$ sudo chmod -R 777 work/
Follow the directions in Compiling Redtamarin.
Follow the instructions from How to create a bootable USB stick on OS X.
Under Mac OS X Yosemite I used
Create a bootable USB from the Terminal
Convert the .iso file to .img using the convert option of hdiutil
$ hdiutil convert -format UDRW -o ubuntu-15.10-desktop-amd64.img ubuntu-15.10-desktop-amd64.iso
$ mv ubuntu-15.10-desktop-amd64.img.dmg ubuntu-15.10-desktop-amd64.img
get the current list of devices
$ diskutil list
insert the USB key
get the current list of devices
$ diskutil list
determine the device node assigned to your flash media (e.g. /dev/disk2)
in my case:
/dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *8.0 GB disk2 1: DOS_FAT_32 TEST 8.0 GB disk2s1
5. unmount the disk `$ diskutil unmountDisk /dev/disk2` you should get `Unmount of all volumes on disk2 was successful` 6. write the img to the disk `$ sudo dd if=ubuntu-15.10-desktop-amd64.img of=/dev/rdisk2 bs=1m` wait ... you should get ``` 1123+1 records in 1123+1 records out 1178386432 bytes transferred in 88.655119 secs (13291804 bytes/sec) ``` and also a popup window "The disk you inserted was not readable by this computer" [initialize...] [ignore] [eject] you can click ignore or eject 7. Eject the USB key `$ diskutil eject /dev/disk2`
This is related to the Hardware Setup with the Gigabyte GB-BXBT-2807.
In the BIOS (firmware), see Ubuntu UEFI help
- disable QuickBoot/FastBoot
- disable Intel Smart Response Technology (SRT)
- disable SecureBoot
During the setup at "Allocate drive space", chose "Erase disk and install Ubuntu".