Monday, June 4, 2012

Using dynagen & dynamips for multible cisco router simulation


dynage dynamips cisco linux console terminal network lab simulation


       If you want to simulate a Cisco router, you can use dynamips but if you want to create a network topology you have to use both of dynagen and dynamips. This blog post is about about creating a sample network topology, connecting routers to each other and testing all nodes in the topology.


       I'm using Ubuntu 12.04 to show an example now. First, we have to install dynagen (and dynamips) on Ubuntu 12.04. Actually we will also need dynamips but dynamips is a dependance of dynamips. So if we install dynagen, dynamips will be installed with dynagen.



ismail@ismail-ThinkPad-T410:~$ sudo apt-get install dynagen 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  dynamips python-configobj
The following NEW packages will be installed:
  dynagen dynamips python-configobj
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,070 kB/1,418 kB of archives.
After this operation, 4,263 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/main python-configobj all 4.7.2+ds-3build1 [233 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/multiverse dynagen all 0.11.0-6 [836 kB]
Fetched 1,070 kB in 0s (1,495 kB/s)
Selecting previously unselected package dynamips.
(Reading database ... 206573 files and directories currently installed.)
Unpacking dynamips (from .../dynamips_0.2.7-0.2.8RC2-5ubuntu1_amd64.deb) ...
Selecting previously unselected package python-configobj.
Unpacking python-configobj (from .../python-configobj_4.7.2+ds-3build1_all.deb) ...
Selecting previously unselected package dynagen.
Unpacking dynagen (from .../dynagen_0.11.0-6_all.deb) ...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Setting up dynamips (0.2.7-0.2.8RC2-5ubuntu1) ...
Setting up python-configobj (4.7.2+ds-3build1) ...
Setting up dynagen (0.11.0-6) ...
Processing triggers for python-support ...
ismail@ismail-ThinkPad-T410:~$ 

Let's start to work with sample network topology;



       There are only 3 routers on our sample network topology. Only one dynamips instance should be enough.

1-) Start dynamips instance


ismail@ismail-ThinkPad-T410:~$ dynamips -H 7100 &
[1] 16919
ismail@ismail-ThinkPad-T410:~$ Cisco Router Simulation Platform (version 0.2.8-RC2-amd64)
Copyright (c) 2005-2007 Christophe Fillot.
Build date: Jan 18 2011 19:25:29

Hypervisor TCP control server started (port 7100).

ismail@ismail-ThinkPad-T410:~$ ps -ef | grep dynamips
ismail   16919  8265  6 17:59 pts/2    00:00:00 dynamips -H 7100
ismail   16934  8265  0 17:59 pts/2    00:00:00 grep --color=auto dynamips
ismail@ismail-ThinkPad-T410:~$ 

       We are starting dynamips service with "dynamips -H 7100 &" and checking it with "ps -ef | grep dynamips" command.

2-) Create a dynagen configuration file


# [START INSTANCE1]

[localhost:7100]
  udp=10000
  workingdir = /tmp/working

[[3725]]
  image = /tmp/c3725-adventerprisek9-mz.124-15.T13.bin
  ram = 128
#  idlepc = ?? We will talk about it later.
  ghostios = true
  sparsemem = true
  idlemax = 100
  disk0=128

 [[Router R1]]
  model = 3725
  console = 2001
  autostart = false
#  F0/0 =
  S0/0 = R2 S0/0

 [[Router R2]]
  model = 3725
  console = 2002
  autostart = false
#  F0/0 =
  S0/0 = R1 S0/0
  S0/1 = R3 S0/0

 [[Router R3]]
  model = 3725
  console = 2003
  autostart = false
  S0/0 = R2 S0/1
# F0/0 =

# [FINISH INSTANCE1] 

       First stage is about connecting to an existing dynamips service. Dynamips will create some files when it is loading a topology. This files will be created in  the "workingdir" directory.

       Second stage is about creating a Cisco Router model. We have to define a Cisco ios file path and some hardware specifications in this stage.

       The last stages are about defining our virtual routers. If we create more than one models, we can select different models for earch virtual router. The "console" key defines the port number. We will use this port numbers to connect to console of router. Autostart key defines either manual or auto router booting while starting to dynagen process. Finally we will define  connections between virtual routers.

       I created a "working" directory under /tmp and the dynagen configuration file before starting the dynagen as shown below:

ismail@ismail-ThinkPad-T410:~$ vim /tmp/sample1.net
{write dynagen configuration file content as above INSTANCE1}
ismail@ismail-ThinkPad-T410:~$ 
ismail@ismail-ThinkPad-T410:~$ dynagen /tmp/sample1.net 
Reading configuration file...

Shutdown in progress...
Shutdown completed.
CPU0: carved JIT exec zone of 64 Mb into 2048 pages of 32 Kb.
NVRAM is empty, setting config register to 0x2142
C3725 instance 'ghost-c3725-adventerprisek9-mz.124-15.T13.bin-localhost.ghost' (id 3):
  VM Status  : 0
  RAM size   : 128 Mb
  NVRAM size : 128 Kb
  IOS image  : /tmp/c3725-adventerprisek9-mz.124-15.T13.bin

Loading ELF file '/tmp/c3725-adventerprisek9-mz.124-15.T13.bin'...
ELF entry point: 0x80008000

C3725 'ghost-c3725-adventerprisek9-mz.124-15.T13.bin-localhost.ghost': starting simulation (CPU0 PC=0xffffffffbfc00000), JIT enabled.

C3725 'ghost-c3725-adventerprisek9-mz.124-15.T13.bin-localhost.ghost': stopping simulation.
Network successfully loaded

Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa

=> list
Name       Type       State      Server          Console   
R1         3725       stopped    localhost:7100  2001      
R2         3725       stopped    localhost:7100  2002      
R3         3725       stopped    localhost:7100  2003      
=> 
=> ?

Documented commands (type help <topic>):
========================================
capture  confreg  cpuinfo  export  hist    list  py      save   show   suspend
clear    console  end      filter  idlepc  no    reload  send   start  telnet 
conf     copy     exit     help    import  push  resume  shell  stop   ver    

=> 
=> start R1
Warning: Starting R1 with no idle-pc value
CPU0: carved JIT exec zone of 64 Mb into 2048 pages of 32 Kb.
C3725 instance 'R1' (id 0):
  VM Status  : 0
  RAM size   : 128 Mb
  NVRAM size : 128 Kb
  IOS image  : /tmp/c3725-adventerprisek9-mz.124-15.T13.bin

Loading ELF file '/tmp/c3725-adventerprisek9-mz.124-15.T13.bin'...
ELF loading skipped, using a ghost RAM file.
ELF entry point: 0x80008000

C3725 'R1': starting simulation (CPU0 PC=0xffffffffbfc00000), JIT enabled.
100-VM 'R1' started
=> 
=> start R2
Warning: Starting R2 with no idle-pc value
CPU0: carved JIT exec zone of 64 Mb into 2048 pages of 32 Kb.
NVRAM is empty, setting config register to 0x2142
C3725 instance 'R2' (id 1):
  VM Status  : 0
  RAM size   : 128 Mb
  NVRAM size : 128 Kb
  IOS image  : /tmp/c3725-adventerprisek9-mz.124-15.T13.bin

Loading ELF file '/tmp/c3725-adventerprisek9-mz.124-15.T13.bin'...
ELF loading skipped, using a ghost RAM file.
ELF entry point: 0x80008000

C3725 'R2': starting simulation (CPU0 PC=0xffffffffbfc00000), JIT enabled.
100-VM 'R2' started
=> start R3
Warning: Starting R3 with no idle-pc value
CPU0: carved JIT exec zone of 64 Mb into 2048 pages of 32 Kb.
NVRAM is empty, setting config register to 0x2142
C3725 instance 'R3' (id 2):
  VM Status  : 0
  RAM size   : 128 Mb
  NVRAM size : 128 Kb
  IOS image  : /tmp/c3725-adventerprisek9-mz.124-15.T13.bin

Loading ELF file '/tmp/c3725-adventerprisek9-mz.124-15.T13.bin'...
ELF loading skipped, using a ghost RAM file.
ELF entry point: 0x80008000

C3725 'R3': starting simulation (CPU0 PC=0xffffffffbfc00000), JIT enabled.
100-VM 'R3' started
=> 

Open another terminal and execute this command:

ismail@ismail-ThinkPad-T410:~$ telnet localhost 2001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connected to Dynamips VM "R1" (ID 0, type c3725) - Console port

when press enter will appear this;

% Please answer 'yes' or 'no'.
Would you like to enter the initial configuration dialog? [yes/no]: 

press Ctrl+c and enter and enter again:

Press RETURN to get started!


*Mar  1 00:00:03.843: %LINEPROTO-5-UPDOWN: Line protocol on Interface VoIP-Null0, changed state to up
*Mar  1 00:00:03.847: %LINEPROTO-5-UPDOWN: Line protocol on Interface IPv6-mpls, changed state to up
*Mar  1 00:00:03.927: %LINK-3-UPDOWN: Interface Serial0/0, changed state to up
*Mar  1 00:00:03.935: %LINK-3-UPDOWN: Interface Serial0/1, changed state to up
*Mar  1 00:00:04.927: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to up
*Mar  1 00:00:04.935: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/1, changed state to up
*Mar  1 00:00:32.927: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/1, changed state to down
*Mar  1 00:01:26.839: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to down
*Mar  1 00:01:32.875: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to up
*Mar  1 00:01:39.015: %LINK-5-CHANGED: Interface FastEthernet0/1, changed state to administratively down
*Mar  1 00:0
Router>1:39.075: %LINK-5-CHANGED: Interface FastEthernet0/0, changed state to administratively down
*Mar  1 00:01:40.115: %SYS-5-RESTART: System restarted --
Cisco IOS Software, 3700 Software (C3725-ADVENTERPRISEK9-M), Version 12.4(15)T13, RELEASE SOFTWARE (fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.
Compiled Wed 07-Apr-10 12:44 by prod_rel_team
*Mar  1 00:01:40.123: %SNMP-5-COLDSTART: SNMP agent on host Router is undergoing a cold start
*Mar  1 00:01:40.147: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down
*Mar  1 00:01:40.147: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down
*Mar  1 00:01:40.159: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is OFF
*Mar  1 00:01:40.159: %CRYPTO-6-GDOI_ON_OFF: GDOI is OFF
*Mar  1 00:01:40.951: %LINK-5-CHANGED: Interface Serial0/0, changed state to administratively down
*Mar  1 00:01:40.951: %LINK-5-CHANGED: Interface Serial0/1, changed state to administratively down
*Mar  1 00:01:41.951: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to down
*Mar  1 00:01:43.839: %IP-5-WEBINST_KILL: Terminating DNS process
Router>

        So you can get console for other virtual routers with "telnet localhost 2002", "telnet localhost 2003" and "telnet localhost 2004" commands.   

        I'm preparing more samples for multiple instances, physical ethernet connectivity and switch simulation with dynagen&dynamips.

Sunday, June 3, 2012

Compiling and installing Fuzuli from source



Installing Fuzuli on Ubuntu 12.04 LTS article is explaining how to install Fuzuli from the Debian package. So you have to choose the correct .deb file because those packages contain compiled binary files  for differenct operation system architectures. In this article, we are talking about how to compile Fuzuli source code. Therefore you don't need to select any options for your system because correct binary files will be generated by make tools for your system.

Fuzuli source code is ready for download in the page http://code.google.com/p/fuzuli/source/browse/. You will learn how to download Fuzuli source code and how to compile it in this article steps.

1) INSTALLING MERCURIAL

We are using mercurial hg to update project source code and  you can also create a clone of Fuzuli on your file system. Our mercurial repository has the fresh source code of Fuzuli.

First of all we have to install mercurial like below:

user@user-VirtualBox:~$ 
user@user-VirtualBox:~$ sudo apt-get install mercurial
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  mercurial-common
Suggested packages:
  qct wish vim emacs kdiff3 tkdiff meld xxdiff python-mysqldb python-pygments
The following NEW packages will be installed:
  mercurial mercurial-common
0 upgraded, 2 newly installed, 0 to remove and 154 not upgraded.
Need to get 1,982 kB of archives.
After this operation, 6,691 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/universe mercurial-common all 2.0.2-1ubuntu1 [1,945 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/universe mercurial i386 2.0.2-1ubuntu1 [37.1 kB]
Fetched 1,982 kB in 0s (1,991 kB/s)
Selecting previously unselected package mercurial-common.
(Reading database ... 140906 files and directories currently installed.)
Unpacking mercurial-common (from .../mercurial-common_2.0.2-1ubuntu1_all.deb) ...
Selecting previously unselected package mercurial.
Unpacking mercurial (from .../mercurial_2.0.2-1ubuntu1_i386.deb) ...
Processing triggers for man-db ...
Setting up mercurial-common (2.0.2-1ubuntu1) ...
Setting up mercurial (2.0.2-1ubuntu1) ...

Creating config file /etc/mercurial/hgrc.d/hgext.rc with new version
user@user-VirtualBox:~$ 


 2-) GETTING SOURCE OF FUZULI WITH MERCURIAL

Also you can see a command line for cloning the source code on http://code.google.com/p/fuzuli/source/checkout page, command-line access part.

user@user-VirtualBox:~$ hg clone https://code.google.com/p/fuzuli/
destination directory: fuzuli
requesting all changes
adding changesets
adding manifests
adding file changes
added 21 changesets with 242 changes to 136 files
updating to branch default
116 files updated, 0 files merged, 0 files removed, 0 files unresolved

3-) INSTALLING GCC TO COMPILE SOFTWARES


We will need gcc compiler to generate binaries from source code, let's install it:

user@user-VirtualBox:~$ 
user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install g++
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  g++-multilib
The following NEW packages will be installed:
  g++
0 upgraded, 1 newly installed, 0 to remove and 154 not upgraded.
Need to get 1,444 B of archives.
After this operation, 34.8 kB of additional disk space will be used.
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/main g++ i386 4:4.6.3-1ubuntu5 [1,444 B]
Fetched 1,444 B in 0s (13.3 kB/s)
Selecting previously unselected package g++.
(Reading database ... 142965 files and directories currently installed.)
Unpacking g++ (from .../g++_4%3a4.6.3-1ubuntu5_i386.deb) ...
Processing triggers for man-db ...
Setting up g++ (4:4.6.3-1ubuntu5) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode.
user@user-VirtualBox:/usr/share/fuzuli$ 

 4-) INSTALLING DEPENDENCIES TO COMPILE FUZULI


4a-) MySQL database client library,

libmysqlclient-dev is mandatory but libmysqlclient18 is not. 


user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install libmysqlclient18 libmysqlclient-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  mysql-common zlib1g-dev
The following NEW packages will be installed:
  libmysqlclient-dev libmysqlclient18 mysql-common zlib1g-dev
0 upgraded, 4 newly installed, 0 to remove and 154 not upgraded.
Need to get 2,455 kB of archives.
After this operation, 8,944 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/main mysql-common all 5.5.22-0ubuntu1 [13.7 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/main libmysqlclient18 i386 5.5.22-0ubuntu1 [921 kB]
Get:3 http://tr.archive.ubuntu.com/ubuntu/ precise/main zlib1g-dev i386 1:1.2.3.4.dfsg-3ubuntu4 [162 kB]
Get:4 http://tr.archive.ubuntu.com/ubuntu/ precise/main libmysqlclient-dev i386 5.5.22-0ubuntu1 [1,358 kB]
Fetched 2,455 kB in 6s (375 kB/s)                                                                     
Selecting previously unselected package mysql-common.
(Reading database ... 142970 files and directories currently installed.)
Unpacking mysql-common (from .../mysql-common_5.5.22-0ubuntu1_all.deb) ...
Selecting previously unselected package libmysqlclient18.
Unpacking libmysqlclient18 (from .../libmysqlclient18_5.5.22-0ubuntu1_i386.deb) ...
Selecting previously unselected package zlib1g-dev.
Unpacking zlib1g-dev (from .../zlib1g-dev_1%3a1.2.3.4.dfsg-3ubuntu4_i386.deb) ...
Selecting previously unselected package libmysqlclient-dev.
Unpacking libmysqlclient-dev (from .../libmysqlclient-dev_5.5.22-0ubuntu1_i386.deb) ...
Processing triggers for man-db ...
Setting up mysql-common (5.5.22-0ubuntu1) ...
Setting up libmysqlclient18 (5.5.22-0ubuntu1) ...
Setting up zlib1g-dev (1:1.2.3.4.dfsg-3ubuntu4) ...
Setting up libmysqlclient-dev (5.5.22-0ubuntu1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
user@user-VirtualBox:/usr/share/fuzuli$ 

 4b-) The Tk toolkit for TCL and X11 (default version) - runtime files


user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install tk tk-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libexpat1-dev libfontconfig1-dev libfreetype6-dev libpthread-stubs0 libpthread-stubs0-dev
  libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev libxrender-dev
  libxss-dev libxss1 tcl tcl-dev tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev x11proto-core-dev
  x11proto-input-dev x11proto-kb-dev x11proto-render-dev x11proto-scrnsaver-dev x11proto-xext-dev
  xorg-sgml-doctools xtrans-dev
Suggested packages:
  libxcb-doc tcl-doc tclreadline tcl8.5-doc tk-doc tk8.5-doc
The following NEW packages will be installed:
  libexpat1-dev libfontconfig1-dev libfreetype6-dev libpthread-stubs0 libpthread-stubs0-dev
  libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev libxrender-dev
  libxss-dev libxss1 tcl tcl-dev tcl8.5 tcl8.5-dev tk tk-dev tk8.5 tk8.5-dev x11proto-core-dev
  x11proto-input-dev x11proto-kb-dev x11proto-render-dev x11proto-scrnsaver-dev x11proto-xext-dev
  xorg-sgml-doctools xtrans-dev
0 upgraded, 31 newly installed, 0 to remove and 154 not upgraded.
Need to get 10.2 MB of archives.
After this operation, 36.1 MB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxss1 i386 1:1.2.1-2 [8,604 B]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/main libexpat1-dev i386 2.0.1-7.2ubuntu1 [207 kB]
Get:3 http://tr.archive.ubuntu.com/ubuntu/ precise/main libfreetype6-dev i386 2.4.8-1ubuntu2 [778 kB]
Get:4 http://tr.archive.ubuntu.com/ubuntu/ precise/main libfontconfig1-dev i386 2.8.0-3ubuntu9 [652 kB]
Get:5 http://tr.archive.ubuntu.com/ubuntu/ precise/main libpthread-stubs0 i386 0.3-3 [3,264 B]
Get:6 http://tr.archive.ubuntu.com/ubuntu/ precise/main libpthread-stubs0-dev i386 0.3-3 [2,860 B]
Get:7 http://tr.archive.ubuntu.com/ubuntu/ precise/main xorg-sgml-doctools all 1:1.10-1 [12.0 kB]
Get:8 http://tr.archive.ubuntu.com/ubuntu/ precise/main x11proto-core-dev all 7.0.22-1 [299 kB]
Get:9 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxau-dev i386 1:1.0.6-4 [10.2 kB]
Get:10 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxdmcp-dev i386 1:1.1.0-4 [26.5 kB]
Get:11 http://tr.archive.ubuntu.com/ubuntu/ precise/main x11proto-input-dev all 2.1.99.6-1 [133 kB]
Get:12 http://tr.archive.ubuntu.com/ubuntu/ precise/main x11proto-kb-dev all 1.0.5-2 [27.6 kB]
Get:13 http://tr.archive.ubuntu.com/ubuntu/ precise/main xtrans-dev all 1.2.6-2 [82.9 kB]
Get:14 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxcb1-dev i386 1.8.1-1 [82.4 kB]
Get:15 http://tr.archive.ubuntu.com/ubuntu/ precise/main libx11-dev i386 2:1.4.99.1-0ubuntu2 [894 kB]
Get:16 http://tr.archive.ubuntu.com/ubuntu/ precise/main libx11-doc all 2:1.4.99.1-0ubuntu2 [2,413 kB]
Get:17 http://tr.archive.ubuntu.com/ubuntu/ precise/main x11proto-xext-dev all 7.2.0-3 [253 kB]
Get:18 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxext-dev i386 2:1.3.0-3build1 [150 kB]
Get:19 http://tr.archive.ubuntu.com/ubuntu/ precise/main x11proto-render-dev all 2:0.11.1-2 [20.1 kB]
Get:20 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxrender-dev i386 1:0.9.6-2build1 [26.6 kB]
Get:21 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxft-dev i386 2.2.0-3ubuntu2 [51.7 kB]
Get:22 http://tr.archive.ubuntu.com/ubuntu/ precise/main x11proto-scrnsaver-dev all 1.2.1-2 [23.1 kB]
Get:23 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxss-dev i386 1:1.2.1-2 [12.8 kB]
Get:24 http://tr.archive.ubuntu.com/ubuntu/ precise/main tcl8.5 i386 8.5.11-1ubuntu1 [1,097 kB]
Get:25 http://tr.archive.ubuntu.com/ubuntu/ precise/main tcl all 8.5.0-2 [4,690 B]                    
Get:26 http://tr.archive.ubuntu.com/ubuntu/ precise/main tcl8.5-dev i386 8.5.11-1ubuntu1 [970 kB]     
Get:27 http://tr.archive.ubuntu.com/ubuntu/ precise/main tcl-dev all 8.5.0-2 [7,002 B]                
Get:28 http://tr.archive.ubuntu.com/ubuntu/ precise/main tk8.5 i386 8.5.11-1 [996 kB]                 
Get:29 http://tr.archive.ubuntu.com/ubuntu/ precise/main tk all 8.5.0-2 [4,720 B]                     
Get:30 http://tr.archive.ubuntu.com/ubuntu/ precise/main tk8.5-dev i386 8.5.11-1 [919 kB]             
Get:31 http://tr.archive.ubuntu.com/ubuntu/ precise/main tk-dev all 8.5.0-2 [4,450 B]                 
Fetched 10.2 MB in 7s (1,431 kB/s)                                                                    
Extracting templates from packages: 100%
Selecting previously unselected package libxss1.
(Reading database ... 143079 files and directories currently installed.)
Unpacking libxss1 (from .../libxss1_1%3a1.2.1-2_i386.deb) ...
Selecting previously unselected package libexpat1-dev.
Unpacking libexpat1-dev (from .../libexpat1-dev_2.0.1-7.2ubuntu1_i386.deb) ...
Selecting previously unselected package libfreetype6-dev.
Unpacking libfreetype6-dev (from .../libfreetype6-dev_2.4.8-1ubuntu2_i386.deb) ...
Selecting previously unselected package libfontconfig1-dev.
Unpacking libfontconfig1-dev (from .../libfontconfig1-dev_2.8.0-3ubuntu9_i386.deb) ...
Selecting previously unselected package libpthread-stubs0.
Unpacking libpthread-stubs0 (from .../libpthread-stubs0_0.3-3_i386.deb) ...
Selecting previously unselected package libpthread-stubs0-dev.
Unpacking libpthread-stubs0-dev (from .../libpthread-stubs0-dev_0.3-3_i386.deb) ...
Selecting previously unselected package xorg-sgml-doctools.
Unpacking xorg-sgml-doctools (from .../xorg-sgml-doctools_1%3a1.10-1_all.deb) ...
Selecting previously unselected package x11proto-core-dev.
Unpacking x11proto-core-dev (from .../x11proto-core-dev_7.0.22-1_all.deb) ...
Selecting previously unselected package libxau-dev.
Unpacking libxau-dev (from .../libxau-dev_1%3a1.0.6-4_i386.deb) ...
Selecting previously unselected package libxdmcp-dev.
Unpacking libxdmcp-dev (from .../libxdmcp-dev_1%3a1.1.0-4_i386.deb) ...
Selecting previously unselected package x11proto-input-dev.
Unpacking x11proto-input-dev (from .../x11proto-input-dev_2.1.99.6-1_all.deb) ...
Selecting previously unselected package x11proto-kb-dev.
Unpacking x11proto-kb-dev (from .../x11proto-kb-dev_1.0.5-2_all.deb) ...
Selecting previously unselected package xtrans-dev.
Unpacking xtrans-dev (from .../xtrans-dev_1.2.6-2_all.deb) ...
Selecting previously unselected package libxcb1-dev.
Unpacking libxcb1-dev (from .../libxcb1-dev_1.8.1-1_i386.deb) ...
Selecting previously unselected package libx11-dev.
Unpacking libx11-dev (from .../libx11-dev_2%3a1.4.99.1-0ubuntu2_i386.deb) ...
Selecting previously unselected package libx11-doc.
Unpacking libx11-doc (from .../libx11-doc_2%3a1.4.99.1-0ubuntu2_all.deb) ...
Selecting previously unselected package x11proto-xext-dev.
Unpacking x11proto-xext-dev (from .../x11proto-xext-dev_7.2.0-3_all.deb) ...
Selecting previously unselected package libxext-dev.
Unpacking libxext-dev (from .../libxext-dev_2%3a1.3.0-3build1_i386.deb) ...
Selecting previously unselected package x11proto-render-dev.
Unpacking x11proto-render-dev (from .../x11proto-render-dev_2%3a0.11.1-2_all.deb) ...
Selecting previously unselected package libxrender-dev.
Unpacking libxrender-dev (from .../libxrender-dev_1%3a0.9.6-2build1_i386.deb) ...
Selecting previously unselected package libxft-dev.
Unpacking libxft-dev (from .../libxft-dev_2.2.0-3ubuntu2_i386.deb) ...
Selecting previously unselected package x11proto-scrnsaver-dev.
Unpacking x11proto-scrnsaver-dev (from .../x11proto-scrnsaver-dev_1.2.1-2_all.deb) ...
Selecting previously unselected package libxss-dev.
Unpacking libxss-dev (from .../libxss-dev_1%3a1.2.1-2_i386.deb) ...
Selecting previously unselected package tcl8.5.
Unpacking tcl8.5 (from .../tcl8.5_8.5.11-1ubuntu1_i386.deb) ...
Selecting previously unselected package tcl.
Unpacking tcl (from .../archives/tcl_8.5.0-2_all.deb) ...
Selecting previously unselected package tcl8.5-dev.
Unpacking tcl8.5-dev (from .../tcl8.5-dev_8.5.11-1ubuntu1_i386.deb) ...
Selecting previously unselected package tcl-dev.
Unpacking tcl-dev (from .../tcl-dev_8.5.0-2_all.deb) ...
Selecting previously unselected package tk8.5.
Unpacking tk8.5 (from .../tk8.5_8.5.11-1_i386.deb) ...
Selecting previously unselected package tk.
Unpacking tk (from .../archives/tk_8.5.0-2_all.deb) ...
Selecting previously unselected package tk8.5-dev.
Unpacking tk8.5-dev (from .../tk8.5-dev_8.5.11-1_i386.deb) ...
Selecting previously unselected package tk-dev.
Unpacking tk-dev (from .../tk-dev_8.5.0-2_all.deb) ...
Processing triggers for doc-base ...
Processing 3 added doc-base files...
Registering documents with scrollkeeper...
Processing triggers for man-db ...
Setting up libxss1 (1:1.2.1-2) ...
Setting up libexpat1-dev (2.0.1-7.2ubuntu1) ...
Setting up libfreetype6-dev (2.4.8-1ubuntu2) ...
Setting up libfontconfig1-dev (2.8.0-3ubuntu9) ...
Setting up libpthread-stubs0 (0.3-3) ...
Setting up libpthread-stubs0-dev (0.3-3) ...
Setting up xorg-sgml-doctools (1:1.10-1) ...
Setting up x11proto-core-dev (7.0.22-1) ...
Setting up libxau-dev (1:1.0.6-4) ...
Setting up libxdmcp-dev (1:1.1.0-4) ...
Setting up x11proto-input-dev (2.1.99.6-1) ...
Setting up x11proto-kb-dev (1.0.5-2) ...
Setting up xtrans-dev (1.2.6-2) ...
Setting up libxcb1-dev (1.8.1-1) ...
Setting up libx11-dev (2:1.4.99.1-0ubuntu2) ...
Setting up libx11-doc (2:1.4.99.1-0ubuntu2) ...
Setting up x11proto-xext-dev (7.2.0-3) ...
Setting up libxext-dev (2:1.3.0-3build1) ...
Setting up x11proto-render-dev (2:0.11.1-2) ...
Setting up libxrender-dev (1:0.9.6-2build1) ...
Setting up libxft-dev (2.2.0-3ubuntu2) ...
Setting up x11proto-scrnsaver-dev (1.2.1-2) ...
Setting up libxss-dev (1:1.2.1-2) ...
Setting up tcl8.5 (8.5.11-1ubuntu1) ...
update-alternatives: using /usr/bin/tclsh8.5 to provide /usr/bin/tclsh (tclsh) in auto mode.
Setting up tcl (8.5.0-2) ...
update-alternatives: using /usr/bin/tclsh-default to provide /usr/bin/tclsh (tclsh) in auto mode.
Setting up tcl8.5-dev (8.5.11-1ubuntu1) ...
Setting up tcl-dev (8.5.0-2) ...
Setting up tk8.5 (8.5.11-1) ...
update-alternatives: using /usr/bin/wish8.5 to provide /usr/bin/wish (wish) in auto mode.
Setting up tk (8.5.0-2) ...
update-alternatives: using /usr/bin/wish-default to provide /usr/bin/wish (wish) in auto mode.
Setting up tk8.5-dev (8.5.11-1) ...
Setting up tk-dev (8.5.0-2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
user@user-VirtualBox:/usr/share/fuzuli$ 

4c-) tcl, The Command Language (default version) - run-time files

It's already installed in step "4b".

user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install tcl tcl-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tcl is already the newest version.
tcl set to manually installed.
tcl-dev is already the newest version.
tcl-dev set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 154 not upgraded.
user@user-VirtualBox:/usr/share/fuzuli$ 

4d-) libcgicc5,

libcgicc5 is not dependency for fuzuli any more. If you are compiling older version of fuzuli, you may need it.

user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install libcgicc
libcgicc5      libcgicc5-dev  libcgicc-doc   
user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install libcgicc5 libcgicc5-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  libcgicc-doc
The following NEW packages will be installed:
  libcgicc5 libcgicc5-dev
0 upgraded, 2 newly installed, 0 to remove and 153 not upgraded.
Need to get 160 kB of archives.
After this operation, 758 kB of additional disk space will be used.
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/universe libcgicc5 i386 3.2.9-3 [59.5 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/universe libcgicc5-dev i386 3.2.9-3 [100 kB]
Fetched 160 kB in 0s (885 kB/s)    
Selecting previously unselected package libcgicc5.
(Reading database ... 147007 files and directories currently installed.)
Unpacking libcgicc5 (from .../libcgicc5_3.2.9-3_i386.deb) ...
Selecting previously unselected package libcgicc5-dev.
Unpacking libcgicc5-dev (from .../libcgicc5-dev_3.2.9-3_i386.deb) ...
Processing triggers for man-db ...
Setting up libcgicc5 (3.2.9-3) ...
Setting up libcgicc5-dev (3.2.9-3) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
user@user-VirtualBox:/usr/share/fuzuli$ 

4e-) libgd2-xpm, GD Graphics Library version 2

user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install libgd2-xpm libgd2-xpm-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libgd2-xpm is already the newest version.
The following extra packages will be installed:
  libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libpng12-dev libxpm-dev
The following NEW packages will be installed:
  libgd2-xpm-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libpng12-dev libxpm-dev
0 upgraded, 6 newly installed, 0 to remove and 154 not upgraded.
Need to get 928 kB of archives.
After this operation, 2,962 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/main libjpeg-turbo8-dev i386 1.1.90+svn733-0ubuntu4 [413 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/main libjpeg8-dev i386 8c-2ubuntu7 [1,544 B]
Get:3 http://tr.archive.ubuntu.com/ubuntu/ precise/main libjpeg-dev all 8c-2ubuntu7 [1,536 B]
Get:4 http://tr.archive.ubuntu.com/ubuntu/ precise/main libpng12-dev i386 1.2.46-3ubuntu4 [207 kB]
Get:5 http://tr.archive.ubuntu.com/ubuntu/ precise/main libxpm-dev i386 1:3.5.9-4 [93.9 kB]
Get:6 http://tr.archive.ubuntu.com/ubuntu/ precise/main libgd2-xpm-dev i386 2.0.36~rc1~dfsg-6ubuntu2 [210 kB]
Fetched 928 kB in 0s (1,660 kB/s)   
Selecting previously unselected package libjpeg-turbo8-dev.
(Reading database ... 145510 files and directories currently installed.)
Unpacking libjpeg-turbo8-dev (from .../libjpeg-turbo8-dev_1.1.90+svn733-0ubuntu4_i386.deb) ...
Selecting previously unselected package libjpeg8-dev.
Unpacking libjpeg8-dev (from .../libjpeg8-dev_8c-2ubuntu7_i386.deb) ...
Selecting previously unselected package libjpeg-dev.
Unpacking libjpeg-dev (from .../libjpeg-dev_8c-2ubuntu7_all.deb) ...
Selecting previously unselected package libpng12-dev.
Unpacking libpng12-dev (from .../libpng12-dev_1.2.46-3ubuntu4_i386.deb) ...
Selecting previously unselected package libxpm-dev.
Unpacking libxpm-dev (from .../libxpm-dev_1%3a3.5.9-4_i386.deb) ...
Selecting previously unselected package libgd2-xpm-dev.
Unpacking libgd2-xpm-dev (from .../libgd2-xpm-dev_2.0.36~rc1~dfsg-6ubuntu2_i386.deb) ...
Processing triggers for man-db ...
Setting up libjpeg-turbo8-dev (1.1.90+svn733-0ubuntu4) ...
Setting up libjpeg8-dev (8c-2ubuntu7) ...
Setting up libjpeg-dev (8c-2ubuntu7) ...
Setting up libpng12-dev (1.2.46-3ubuntu4) ...
Setting up libxpm-dev (1:3.5.9-4) ...
Setting up libgd2-xpm-dev (2.0.36~rc1~dfsg-6ubuntu2) ...
user@user-VirtualBox:/usr/share/fuzuli$ 

4f-) libreadline6, GNU readline and history libraries, run-time libraries

user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install libreadline6 libreadline6-dev 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libreadline6 is already the newest version.
The following NEW packages will be installed:
  libreadline6-dev libtinfo-dev
0 upgraded, 2 newly installed, 0 to remove and 151 not upgraded.
Need to get 343 kB of archives.
After this operation, 901 kB of additional disk space will be used.
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise/main libtinfo-dev i386 5.9-4 [93.5 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise/main libreadline6-dev i386 6.2-8 [249 kB]
Fetched 343 kB in 0s (656 kB/s)       
Selecting previously unselected package libtinfo-dev.
(Reading database ... 148620 files and directories currently installed.)
Unpacking libtinfo-dev (from .../libtinfo-dev_5.9-4_i386.deb) ...
Selecting previously unselected package libreadline6-dev.
Unpacking libreadline6-dev (from .../libreadline6-dev_6.2-8_i386.deb) ...
Processing triggers for install-info ...
Setting up libtinfo-dev (5.9-4) ...
Setting up libreadline6-dev (6.2-8) ...
user@user-VirtualBox:/usr/share/fuzuli$ 


4g-) libssl1.0.0

user@user-VirtualBox:/usr/share/fuzuli$ sudo apt-get install libssl-dev 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libssl-doc libssl1.0.0
The following NEW packages will be installed:
  libssl-dev libssl-doc
The following packages will be upgraded:
  libssl1.0.0
1 upgraded, 2 newly installed, 0 to remove and 153 not upgraded.
Need to get 3,449 kB of archives.
After this operation, 6,355 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://tr.archive.ubuntu.com/ubuntu/ precise-updates/main libssl1.0.0 i386 1.0.1-4ubuntu5.2 [1,002 kB]
Get:2 http://tr.archive.ubuntu.com/ubuntu/ precise-updates/main libssl-dev i386 1.0.1-4ubuntu5.2 [1,414 kB]
Get:3 http://tr.archive.ubuntu.com/ubuntu/ precise-updates/main libssl-doc all 1.0.1-4ubuntu5.2 [1,033 kB]
Fetched 3,449 kB in 0s (4,125 kB/s)
Preconfiguring packages ...
(Reading database ... 145603 files and directories currently installed.)
Preparing to replace libssl1.0.0 1.0.1-4ubuntu3 (using .../libssl1.0.0_1.0.1-4ubuntu5.2_i386.deb) ...
Unpacking replacement libssl1.0.0 ...
Setting up libssl1.0.0 (1.0.1-4ubuntu5.2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package libssl-dev.
(Reading database ... 145603 files and directories currently installed.)
Unpacking libssl-dev (from .../libssl-dev_1.0.1-4ubuntu5.2_i386.deb) ...
Selecting previously unselected package libssl-doc.
Unpacking libssl-doc (from .../libssl-doc_1.0.1-4ubuntu5.2_all.deb) ...
Processing triggers for man-db ...
Setting up libssl-dev (1.0.1-4ubuntu5.2) ...
Setting up libssl-doc (1.0.1-4ubuntu5.2) ...
user@user-VirtualBox:/usr/share/fuzuli$ 

4h-) Happycoders libsocket;


There is an article on stdioe blog. You can follow those instructions: http://stdioe.blogspot.com/2012/06/compiling-happycoders-libsocket-in.html

Note: After the installing process of Happycoders libsocket, you have to care "make install" command's output notes, (like following text)

----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib/happycoders/

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

You can execute "sudo ldconfig -n /usr/lib/happycoders" command and  edit "/etc/ld.so.conf.d/libc.conf" file like following text:

# libc default configuration
/usr/local/lib
/usr/local/lib/happycoders

Right now we can start to compiling Fuzuli source,

First of all, if you get any errors while compiling you can detect the reason of the error and you can execute "sudo ./release-clean-all.sh" command to go back to first step of fuzuli compiling. For example if an error accours as follow,

user@user-VirtualBox:/usr/share/fuzuli$ ./release-build-all.sh 
Building file: ../src/AritmeticExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/AritmeticExpression.d" -MT"src/AritmeticExpression.d" -o "src/AritmeticExpression.o" "../src/AritmeticExpression.cpp"
In file included from ../src/AritmeticExpression.cpp:19:0:
../src/../include/FuzuliTypes.h:31:25: fatal error: cgicc/Cgicc.h: No such file or directory
compilation terminated.
make: *** [src/AritmeticExpression.o] Error 1
Building file: ../src/IO.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/IO.d" -MT"src/IO.d" -o "src/IO.o" "../src/IO.cpp"
In file included from ../src/IO.cpp:19:0:
../../Interpreter/include/FuzuliTypes.h:31:25: fatal error: cgicc/Cgicc.h: No such file or directory
compilation terminated.
make: *** [src/IO.o] Error 1
Building file: ../src/main.cpp
Invoking: Cross G++ Compiler
g++ -I../../Interpreter/include -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/main.d" -MT"src/main.d" -o "src/main.o" "../src/main.cpp"
../src/main.cpp:23:31: fatal error: readline/readline.h: No such file or directory
compilation terminated.
make: *** [src/main.o] Error 1
--------------------------------------------
|      testing all FUZULI script files.     |
--------------------------------------------

./tester.sh: line 35: fuzuli: command not found
argc_argv.fzl:
./tester.sh: line 35: fuzuli: command not found
arithmetic.fzl:
./tester.sh: line 35: fuzuli: command not found
block.fzl:
./tester.sh: line 35: fuzuli: command not found
Break.fzl:
./tester.sh: line 35: fuzuli: command not found
clientsocket.fzl:
./tester.sh: line 35: fuzuli: command not found
clone.fzl:
./tester.sh: line 35: fuzuli: command not found
dotimes.fzl:
./tester.sh: line 35: fuzuli: command not found
eval.fzl:
./tester.sh: line 35: fuzuli: command not found
explode.fzl:
./tester.sh: line 35: fuzuli: command not found
fibonacci.fzl:
./tester.sh: line 35: fuzuli: command not found
for.fzl:
./tester.sh: line 35: fuzuli: command not found
funcoverload.fzl:
./tester.sh: line 35: fuzuli: command not found
function.fzl:
./tester.sh: line 35: fuzuli: command not found
hex.fzl:
./tester.sh: line 35: fuzuli: command not found
inc.fzl:
./tester.sh: line 35: fuzuli: command not found
letTest1.fzl:
./tester.sh: line 35: fuzuli: command not found
list.fzl:
./tester.sh: line 35: fuzuli: command not found
math.fzl:
./tester.sh: line 35: fuzuli: command not found
maxmin.fzl:
./tester.sh: line 35: fuzuli: command not found
ols.fzl:
./tester.sh: line 35: fuzuli: command not found
sort.fzl:
./tester.sh: line 35: fuzuli: command not found
strings.fzl:
./tester.sh: line 35: fuzuli: command not found
switchcase.fzl:
./tester.sh: line 35: fuzuli: command not found
types.fzl:
./tester.sh: line 35: fuzuli: command not found
while.fzl:

--------------------------------------------
|             Report of test               |
--------------------------------------------
|  25 files has been tested.
|  0 statements has been passed.
|  0 statements has been failed.
--------------------------------------------

you can execute "sudo ./release-clean-all.sh" command and install libcgicc5-dev with "sudo apt-get install libcgicc5 libcgicc5-dev" command and continue the compiling fuzuli

user@user-VirtualBox:/usr/share/fuzuli$ sudo ./release-clean-all.sh 
rm -rf  ./src/AritmeticExpression.o ./src/AstBuilder.o ./src/BlockExpression.o ./src/CppEmitter.o ./src/DataTypeExpression.o ./src/DynLoadExpression.o ./src/Environment.o ./src/EvalExpression.o ./src/Expression.o ./src/FunctionExpression.o ./src/IOExpression.o ./src/IfExpression.o ./src/LetExpression.o ./src/ListExpression.o ./src/LoopsExpression.o ./src/SourceCode.o ./src/Token.o ./src/WebExpression.o  ./src/AritmeticExpression.d ./src/AstBuilder.d ./src/BlockExpression.d ./src/CppEmitter.d ./src/DataTypeExpression.d ./src/DynLoadExpression.d ./src/Environment.d ./src/EvalExpression.d ./src/Expression.d ./src/FunctionExpression.d ./src/IOExpression.d ./src/IfExpression.d ./src/LetExpression.d ./src/ListExpression.d ./src/LoopsExpression.d ./src/SourceCode.d ./src/Token.d ./src/WebExpression.d  libfuzuli.so
 
rm -rf  ./src/IO.o ./src/Math.o ./src/MySql.o ./src/TclTk.o ./src/gd.o ./src/net.o ./src/strings.o ./src/utils.o  ./src/IO.d ./src/Math.d ./src/MySql.d ./src/TclTk.d ./src/gd.d ./src/net.d ./src/strings.d ./src/utils.d  libFuzuliCore.so
 
rm -rf  ./src/main.o  ./src/main.d  fuzuli

Let's continue the compiling Fuzuli,
After  compiling, the build script will try the some testing. But all of them will be failed because, fuzuli binary file will be located in  the /usr/lib/fuzuli directory. We should create a link under the /usr/bin directory.

user@user-VirtualBox:/usr/share/fuzuli$ sudo ln -s /usr/lib/fuzuli/fuzuli /usr/bin/fuzuli

We are get ready to build Fuzuli project now,

user@user-VirtualBox:/usr/share/fuzuli$ sudo ./release-build-all.sh 
Building file: ../src/AritmeticExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/AritmeticExpression.d" -MT"src/AritmeticExpression.d" -o "src/AritmeticExpression.o" "../src/AritmeticExpression.cpp"
Finished building: ../src/AritmeticExpression.cpp
 
Building file: ../src/AstBuilder.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/AstBuilder.d" -MT"src/AstBuilder.d" -o "src/AstBuilder.o" "../src/AstBuilder.cpp"
Finished building: ../src/AstBuilder.cpp
 
Building file: ../src/BlockExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/BlockExpression.d" -MT"src/BlockExpression.d" -o "src/BlockExpression.o" "../src/BlockExpression.cpp"
Finished building: ../src/BlockExpression.cpp
 
Building file: ../src/CppEmitter.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/CppEmitter.d" -MT"src/CppEmitter.d" -o "src/CppEmitter.o" "../src/CppEmitter.cpp"
Finished building: ../src/CppEmitter.cpp
 
Building file: ../src/DataTypeExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/DataTypeExpression.d" -MT"src/DataTypeExpression.d" -o "src/DataTypeExpression.o" "../src/DataTypeExpression.cpp"
Finished building: ../src/DataTypeExpression.cpp
 
Building file: ../src/DynLoadExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/DynLoadExpression.d" -MT"src/DynLoadExpression.d" -o "src/DynLoadExpression.o" "../src/DynLoadExpression.cpp"
Finished building: ../src/DynLoadExpression.cpp
 
Building file: ../src/Environment.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/Environment.d" -MT"src/Environment.d" -o "src/Environment.o" "../src/Environment.cpp"
Finished building: ../src/Environment.cpp
 
Building file: ../src/EvalExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/EvalExpression.d" -MT"src/EvalExpression.d" -o "src/EvalExpression.o" "../src/EvalExpression.cpp"
Finished building: ../src/EvalExpression.cpp
 
Building file: ../src/Expression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/Expression.d" -MT"src/Expression.d" -o "src/Expression.o" "../src/Expression.cpp"
Finished building: ../src/Expression.cpp
 
Building file: ../src/FunctionExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/FunctionExpression.d" -MT"src/FunctionExpression.d" -o "src/FunctionExpression.o" "../src/FunctionExpression.cpp"
Finished building: ../src/FunctionExpression.cpp
 
Building file: ../src/IOExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/IOExpression.d" -MT"src/IOExpression.d" -o "src/IOExpression.o" "../src/IOExpression.cpp"
Finished building: ../src/IOExpression.cpp
 
Building file: ../src/IfExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/IfExpression.d" -MT"src/IfExpression.d" -o "src/IfExpression.o" "../src/IfExpression.cpp"
Finished building: ../src/IfExpression.cpp
 
Building file: ../src/LetExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/LetExpression.d" -MT"src/LetExpression.d" -o "src/LetExpression.o" "../src/LetExpression.cpp"
Finished building: ../src/LetExpression.cpp
 
Building file: ../src/ListExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/ListExpression.d" -MT"src/ListExpression.d" -o "src/ListExpression.o" "../src/ListExpression.cpp"
Finished building: ../src/ListExpression.cpp
 
Building file: ../src/LoopsExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/LoopsExpression.d" -MT"src/LoopsExpression.d" -o "src/LoopsExpression.o" "../src/LoopsExpression.cpp"
Finished building: ../src/LoopsExpression.cpp
 
Building file: ../src/SourceCode.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/SourceCode.d" -MT"src/SourceCode.d" -o "src/SourceCode.o" "../src/SourceCode.cpp"
Finished building: ../src/SourceCode.cpp
 
Building file: ../src/Token.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/Token.d" -MT"src/Token.d" -o "src/Token.o" "../src/Token.cpp"
Finished building: ../src/Token.cpp
 
Building file: ../src/WebExpression.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/WebExpression.d" -MT"src/WebExpression.d" -o "src/WebExpression.o" "../src/WebExpression.cpp"
Finished building: ../src/WebExpression.cpp
 
Building target: libfuzuli.so
Invoking: GCC C++ Linker
g++ -shared -o "libfuzuli.so"  ./src/AritmeticExpression.o ./src/AstBuilder.o ./src/BlockExpression.o ./src/CppEmitter.o ./src/DataTypeExpression.o ./src/DynLoadExpression.o ./src/Environment.o ./src/EvalExpression.o ./src/Expression.o ./src/FunctionExpression.o ./src/IOExpression.o ./src/IfExpression.o ./src/LetExpression.o ./src/ListExpression.o ./src/LoopsExpression.o ./src/SourceCode.o ./src/Token.o ./src/WebExpression.o   -ldl
Finished building target: libfuzuli.so
 
make --no-print-directory post-build
./eclipse-post-inst.sh
 
Building file: ../src/IO.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/IO.d" -MT"src/IO.d" -o "src/IO.o" "../src/IO.cpp"
../src/IO.cpp: In function ‘void __readToken(FILE*, fuzuli::Token*)’:
../src/IO.cpp:167:9: warning: variable ‘dummy_return’ set but not used [-Wunused-but-set-variable]
../src/IO.cpp: In function ‘void __readLine(FILE*, fuzuli::Token*)’:
../src/IO.cpp:193:9: warning: variable ‘dummy_return’ set but not used [-Wunused-but-set-variable]
Finished building: ../src/IO.cpp
 
Building file: ../src/Math.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/Math.d" -MT"src/Math.d" -o "src/Math.o" "../src/Math.cpp"
Finished building: ../src/Math.cpp
 
Building file: ../src/MySql.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/MySql.d" -MT"src/MySql.d" -o "src/MySql.o" "../src/MySql.cpp"
Finished building: ../src/MySql.cpp
 
Building file: ../src/TclTk.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/TclTk.d" -MT"src/TclTk.d" -o "src/TclTk.o" "../src/TclTk.cpp"
Finished building: ../src/TclTk.cpp
 
Building file: ../src/gd.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/gd.d" -MT"src/gd.d" -o "src/gd.o" "../src/gd.cpp"
Finished building: ../src/gd.cpp
 
Building file: ../src/net.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/net.d" -MT"src/net.d" -o "src/net.o" "../src/net.cpp"
Finished building: ../src/net.cpp
 
Building file: ../src/strings.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/strings.d" -MT"src/strings.d" -o "src/strings.o" "../src/strings.cpp"
Finished building: ../src/strings.cpp
 
Building file: ../src/utils.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/tcl -I../../Interpreter/include/ -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/utils.d" -MT"src/utils.d" -o "src/utils.o" "../src/utils.cpp"
Finished building: ../src/utils.cpp
 
Building target: libFuzuliCore.so
Invoking: Cross G++ Linker
g++ -L/usr/lib/happycoders -L/usr/lib/i386-linux-gnu -shared -o "libFuzuliCore.so"  ./src/IO.o ./src/Math.o ./src/MySql.o ./src/TclTk.o ./src/gd.o ./src/net.o ./src/strings.o ./src/utils.o   -lm -lssl -lcrypto -lsocket -ltk -lgd -lmysqlclient -ltcl
Finished building target: libFuzuliCore.so
 
make --no-print-directory post-build
./eclipse-post-inst.sh
 
Building file: ../src/main.cpp
Invoking: Cross G++ Compiler
g++ -I../../Interpreter/include -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/main.d" -MT"src/main.d" -o "src/main.o" "../src/main.cpp"
Finished building: ../src/main.cpp
 
Building target: fuzuli
Invoking: Cross G++ Linker
g++  -o "fuzuli"  ./src/main.o  /usr/lib/fuzuli/libfuzuli.so -lreadline
Finished building target: fuzuli
 
make --no-print-directory post-build
./eclipse-post-inst.sh
--------------------------------------------
|      testing all FUZULI script files.     |
--------------------------------------------

argc_argv.fzl:
1: PASS
arithmetic.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
6: PASS
7: PASS
8: PASS
9: PASS
10: PASS
11: PASS
block.fzl:
1: PASS
Break.fzl:
1: PASS
clientsocket.fzl:
1: PASS
clone.fzl:
1: PASS
2: PASS
dotimes.fzl:
1: PASS
eval.fzl:
1: PASS
explode.fzl:
1: PASS
fibonacci.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
for.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
funcoverload.fzl:
1: PASS
2: PASS
3: PASS
function.fzl:
1: PASS
2: PASS
hex.fzl:
1: PASS
inc.fzl:
1: PASS
2: PASS
letTest1.fzl:
1: PASS
list.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
math.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
6: PASS
7: PASS
8: PASS
9: PASS
maxmin.fzl:
1: PASS
ols.fzl:
1: PASS
2: PASS
sort.fzl:
1: PASS
2: PASS
strings.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
6: PASS
7: PASS
8: PASS
9: PASS
10: PASS
11: PASS
12: PASS
13: PASS
14: PASS
15: PASS
16: PASS
17: PASS
switchcase.fzl:
1: PASS
types.fzl:
1: PASS
2: PASS
while.fzl:
1: PASS

--------------------------------------------
|             Report of test               |
--------------------------------------------
|  25 files has been tested.
|  77 statements has been passed.
|  0 statements has been failed.
--------------------------------------------
 
--------------------------------------------
|      testing all FUZULI script files.     |
--------------------------------------------

argc_argv.fzl:
1: PASS
arithmetic.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
6: PASS
7: PASS
8: PASS
9: PASS
10: PASS
11: PASS
block.fzl:
1: PASS
Break.fzl:
1: PASS
clientsocket.fzl:
1: PASS
clone.fzl:
1: PASS
2: PASS
dotimes.fzl:
1: PASS
eval.fzl:
1: PASS
explode.fzl:
1: PASS
fibonacci.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
for.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
funcoverload.fzl:
1: PASS
2: PASS
3: PASS
function.fzl:
1: PASS
2: PASS
hex.fzl:
1: PASS
inc.fzl:
1: PASS
2: PASS
letTest1.fzl:
1: PASS
list.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
math.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
6: PASS
7: PASS
8: PASS
9: PASS
maxmin.fzl:
1: PASS
ols.fzl:
1: PASS
2: PASS
sort.fzl:
1: PASS
2: PASS
strings.fzl:
1: PASS
2: PASS
3: PASS
4: PASS
5: PASS
6: PASS
7: PASS
8: PASS
9: PASS
10: PASS
11: PASS
12: PASS
13: PASS
14: PASS
15: PASS
16: PASS
17: PASS
switchcase.fzl:
1: PASS
types.fzl:
1: PASS
2: PASS
while.fzl:
1: PASS

--------------------------------------------
|             Report of test               |
--------------------------------------------
|  25 files has been tested.
|  77 statements has been passed.
|  0 statements has been failed.
--------------------------------------------
user@user-VirtualBox:/usr/share/fuzuli$ 

Well done. All tests are Ok. You can use Fuzuli now. If you want to update your Fuzuli later, you can clean and build again.

Saturday, June 2, 2012

Mapped IP configuration on Netscreen



         I'm going to talking about MIP feature on Nescreen via a sample network design. This network uses private addresses in the Internal Side and has got public addresses to use external side. The network structure is shown below,


         As shown on network design, we have a computer which has got 172.16.100.11 ip address and we want to map it to 21x.xxx.xx.236 public IP address. What we want is shown below:

         When computer sends any request to public Internet side, devices which are located on Internet side will see it as 21x.xxx.xx.236 and when a request is sent from Internet to 21x.xxx.xx.236 IP address, FW redirects it to 172.16.100.11 IP address. So 172.16.100.11 means 21x.xxx.xx.236 and 21x.xxx.xx.236 means 172.16.100.11.

We will set MIP configuration on Netscreen for this purpose.

(The external side is defined as Internet zone and the internal network is defined as system zone on firewall before. Following configurations are illustrating as that zone names)

         First of all, 21x.xxx.xx.236 is an IP address which is located in the segment between FW and Main router. This segment is not behind of a firewall, conversely, front of the firewall. The firewall should be taken on itself like a sub-interface. Anyway we have to see 21x.xxx.xx.236 IP address in the main router ARP Table with a MAC address which is got from firewall. Otherwise, packages which contains 21x.xxx.xx.236 in the destination field is not able to arrive to target. I will explain this background info at the end of this article. Let's continue to configuration.

1)
         Select “Interfaces” item on the menu which is located on left side of the netscreen configuration web-interface.


2) 
         When Interfaces item is clicked, we can see a page as shown below on the right side of page.


3)
         Clicking to Edit link which is marked on above picture. When It is clicked, following page will be opened.


4)
         Clicking to MIP link, this page is listing already created MIPs.


5)
         Clicking to New button on the right side.


6)
         When clicking to OK and check MIP list again, we will see our configuration on the MIP list,



7)
         Right now, Mapped IP configuration is done. But we have to create the policy to permit traffic. It should have both directions. The following one is about Internet to system direction.


         When you are clicking to policies under the policy menu, you can see policy list on the right side of the page. There are “from” and “to” commands at top of the right side. Select the “Internet” option from the combobox “from” and select system using the “to” part.  


         Right now, The firewall is listing policies from internet to system. Clicking to “New” buttom on the top-right side.

         These two points are important at this step. First, destination address should be MIP. Second, action should be “Permit”.

8)
         Select “system” for 'from' part and select “Internet” for 'to' part on top side and click “go” button after than click to “New” button.


         Source address should be 172.16.100.11 and destination address should be “any”. Than select permit for action.  

         This step permits access to Internet side for 172.16.100.11 addressed computer. If you want to permit access from internet to your internal workstation only, you don't need this step.  


Let's analyse communication background on this scenario.

Telnet to Main router (It's Cisco 3661) and run “show arp” command. Getting output like below,

UGC_Topkapi_3661#show arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
..
Internet  21x.xxx.xx.250          0   0010.dbff.22e0  ARPA   FastEthernet4/0
….
Internet  21x.xxx.xx.236        161   0010.dbff.22e0  ARPA   FastEthernet4/0
…
...


As you know, 21x.xxx.xx.236 and 21x.xxx.xx.250 ip addresses has got exactly same MAC address. The Main router should be send 21.x.xxx.xx.236 packages to firewall mac. The firewall know already how to access to main router. If you understand any step, let me know please.

Compiling Happycoders libsocket in Ubuntu


 Happycoders libsocket is an object oriented and platform independent socket library for C++. It has a nice structure for both tcp and udp sockets. It runs like a charm if you want to connect a server and get the content as well as listen from a port and accept the connections.

Since package maintainers published a debian package mainly for Debian and Ubuntu distros, it can easly be installed on those systems. If you use another os the solutions is to compile it yourself. However, GCC throws an error message which can be easily solved. In order to compile the package and use it with your C++ applications, first open an console and type


wget http://www.speedblue.org/conf/libsocket-1.8.tar.gz


so we have the source package downloaded. Extract the tar archive

gunzip libsocket-1.8.tar.gz
tar -xvf libsocket-1.8.tar 


Now we have a folder with a name of libsocket-1.8. Get in this folder and start the compilation process:

./configure


and then type

make


After getting some output, GCC throws an error:

make  all-recursive
make[1]: Entering directory `/tmp/socket/libsocket-1.8'
Making all in src
make[2]: Entering directory `/tmp/socket/libsocket-1.8/src'
Making all in tests
make[3]: Entering directory `/tmp/socket/libsocket-1.8/src/tests'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/tmp/socket/libsocket-1.8/src/tests'
make[3]: Entering directory `/tmp/socket/libsocket-1.8/src'
if /bin/bash ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I.. -I../src    -g -O2 -Wall -ansi -pedantic -MT socket.lo -MD -MP -MF ".deps/socket.Tpo" \
   -c -o socket.lo `test -f 'socket.cc' || echo './'`socket.cc; \
 then mv -f ".deps/socket.Tpo" ".deps/socket.Plo"; \
 else rm -f ".deps/socket.Tpo"; exit 1; \
 fi
 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I../src -g -O2 -Wall -ansi -pedantic -MT socket.lo -MD -MP -MF .deps/socket.Tpo -c socket.cc  -fPIC -DPIC -o .libs/socket.o
socket.cc: In member function 'void Network::Socket::_write_str_bin(int, const string&) const':
socket.cc:238:44: error: 'memcpy' was not declared in this scope
make[3]: *** [socket.lo] Error 1
make[3]: Leaving directory `/tmp/socket/libsocket-1.8/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/tmp/socket/libsocket-1.8/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/socket/libsocket-1.8'
make: *** [all] Error 2


When you look into to error message we can see the key point:

socket.cc: In member function 'void Network::Socket::_write_str_bin(int, const string&) const':
socket.cc:238:44: error: 'memcpy' was not declared in this scope


It is clear that, GCC needs memcpy to be declared before it is used. It is a function defined in the standar C package string.h and it cstring in C++. Simply open the socket.cc and add the line

#include <string.h>


and compile again. After typing the make command you will get a new error message. A part of this error message is given below:

udpsocket.cc: In member function 'virtual std::string Network::UdpSocket::_read_line_bin(int, unsigned int)':
udpsocket.cc:68:29: error: 'memset' was not declared in this scope


and this is a similar error. memset is an other standard function defined in string.h in C++ and C. Simple edit the file udpsocket and add the same header

#include <string.h>


After compiling many times, GCC will throw similar errors. To cope with this
  • Include string.h in socket.cc
  • Include string.h in udpsocket.cc
  • Include string.h in tcpsocket.cc
  • Include string.h and stddef.h in localsocket.cc
  • Include string.h in netsocket.cc
After all, we you type make again, GCC compiles and produces binary outputs. Then type

sudo make install


if you want to install. Happycoders socket library is a static library by default and your application will not depent it externally. Have fun!

Friday, June 1, 2012

Installing Fuzuli on Ubuntu 12.04 LTS


Following pictures are explaining how to install Fuzuli on Ubuntu 12.04 LTS using the DEB package given in http://code.google.com/p/fuzuli/downloads/list