Wednesday, May 7, 2014

Setup a PPPoE Server Using Mikrotik RouterBoard 750

The scheme I'd like to achieve is like this:

This post will focus on how the PPPoE server is configured. The connection service will be asymmetric like this:
1 Mbps: 1 Mbps Download / 256 Kbps Upload
2 Mbps: 2 Mbps Download / 512 Kbps Upload

The only way to access a routerboard is using their winbox tool which you can download here. Let's start :)

Run the winbox, and you'll get this pop-up box:

Click on the button with three dots to scan connected device, choose the one mac-address that shows up and leave any other things at it is, then click the Connect button to open up another window like this:

Choose IP -> Addresses, add new and fill in the field:
Network: [automatically filled in when you click on 'Apply' button]
Interface: ether1

* Next, Create an IP pool for each service you'll create (allocate):
IP -> Pool, add new IP pool:
Name: 2MB
Next Pool: none

* Create a PPP profile for one of your service:
PPP -> go to Profile tab, add new profile and fill in the following fields:
Local Address:
Remote Address: 2MB
DNS Server:,

* then go to PPPoE Servers, add new PPPoE service, and fill in the following fields:
Service Name: PPPOE
Interface: ether3
check 'One Session Per Host'
uncheck 'machap1' 'machap2' 'chap'

* Create a NAT rule for masquerade
IP -> Firewall -> go to NAT tab, add new NAT rule:
Chain: srcnat
Out. Interface: ether1
>> go to Action tab, choose 'masquerade' as Action

* Create Queue rule for bandwidth limit
Queue -> got to Queue Types tab, add new type for download limit:
Kind: pcq
Rate: 2M

add another one for upload limit:
Type Name: 512KB_UPLOAD
Kind: pcq
Rate: 512K
uncheck 'Dst. Address'
check 'Src. Address'

* Apply the queue type just created:
go to Simple Queue tab, add new simple queue to apply queue type you just created:
in General tab:
Target Address:

>> add another new simple queue rule:
in General tab:
Name: 2MB
Target Address:
Max Limit: choose 512KB_UPLOAD for Target Upload
choose 2MB_DOWNLOAD for Target Download
>> go to Advanced tab:
Queue Type: choose 512KB_UPLOAD for Target Upload
choose 2MB_DOWNLOAD for Target Download

* Create user credential for login:
PPP -> go to Secrets tab, add new PPP secrets:
Name: xs2
Password: xs2
Service: pppoe
Profile: PPPOE_2MB
Local Address:
Remote Address:

Then you can test it by creating a dialer, as I'm using Mac OS X, so I go to System Preferences -> Network, create a connection with a PPPoE interface:

And fill in the credential to connect:

That's it! :)

Monday, May 5, 2014

Running Rplay on Raspbmc for Airplay Mirroring

I'm sure you can find many other posts about installing and running rplay in raspberry pi. If you haven't heard about rplay, this amazing software is developed by company called Vmlite, that gives us possibility to experiencing airplay mirroring without having Apple TV (but, of course, you still have to own an iOS device :D) by install it on small computer Raspberry Pi. You can check here if you want to know more about this amazing little device.

On many other posts, rplay have to be installed on raspbian, a debian-based linux distro customized for Raspberry Pi. In my situation, since I only have small-size SDcard (4 GB), I can't installed raspbian because it needs you to have at least 8 GB SDcard size. And, I also would like to use raspbmc (XBMC based) to be a media centre and powering up my old CRT TV. So, this post is pure notes of my experience. Let's start :)

I assume most of you who read this post already have Raspberry Pi, and already installing raspbmc on it and using it for many purposes.

1. From Raspbmc dashboard, go to Power Icon on bottom left, then choose EXIT:

2. Immediately press ESC on keyboard (you need to have keyboard attached to Pi, doesn't matter if it's a USB, bluetooth or wireless one), when you saw notification box "Press ESC for command line)

3. When you already in CLI and prompted to login, just input 'pi' as username and 'raspberry' for password, that's the default credential (if you haven't changed it)

4. Update the repository:
$ sudo apt-get update
5.  Installing rpi-update:
$ sudo curl -L --output /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update
6. Updating the firmware:
$ sudo rpi-update
7. Allocate more memory to GPU:
sudo raspi-config
then select memory_split, change the value to 256 (Model B device), or 64 or 128 (Model A device)

8. Installing other dependencies:
$ sudo apt-get install libao-dev avahi-utils libavahi-compat-libdnssd-dev libva-dev youtube-dl
9. Updating youtube-dl:
$ sudo youtube-dl --update
10. Download rplay binary and install:
wget -O rplay-1.0.1-armhf.deb
sudo dpkg -i rplay-1.0.1-armhf.deb
This will install and launch /usr/bin/rplay, and it runs automatically on boot.
You can try to reboot your Pi at this point, and rplay should auto start after reboot.

11. Manual start and stop
$ sudo /etc/init.d/rplay start
(NOTE: if you have 2 instances of rplay running, none would work!)
$ sudo /etc/init.d/rplay stop
If you want to see the output message, you can run this way:
$ sudo /user/bin/rplay
Make sure only one instance is running.
12. THIS IS VERY IMPORTANT, enter the license key, without it, AirPlay mirroring won’t work.
Safari browser has problems, try to use other ones. Once rplay is running, go to a browser and open this url:
http://localhost:7100/admin (If you use the browser on the same Pi machine)
The username/password is: admin/admin, go down to the last one, enter the license number, click Submit.

You can also perform other admin tasks here, such as setting password, toggling fullscreen, recording, etc.

The config file is /etc/rplay.conf, you can also manually edit the config file, instead of using the web interface. Append license_key=<your-license-key> to the last line of the file, for example:
admin_password=adminpassword=onscreen_code=0 [or 1]fullscreen=0 [0r 1]license_key=1223dd-your-from-email
13. Test regular AirPlay and AirPlay Mirroring
rPlay supports AirPlay and AirPlay Mirroring. For iphone 4 and iPad 1, you can’t do AirPlay mirroring, but you should be still do AirPlay for Photos/Music/Videos. For iPhone 4S and iPhone 5, iPad 2 and above, you can also do AirPlay mirroring.

On your iOS devices, double click Home button, slide to the most left, and choose rPlay as AirPlay device to connect. For iOS 7, you need to quickly swipe up from the bottom to bring up AirPlay window, and choose rPlay as AirPlay device to connect.

14. Test Chromecast
you need to install and update youtube-dl on pi, run the following command on Pi to auto update it:
$ sudo apt-get install youtube-dl$ sudo youtube-dl –update
right now, this is very simple implementation, it only works with YouTube app, either on Android or iOS. Make sure you download the latest YouTube app on your mobile device, then open YouTube app, pick a video to play, on the top right corner, there will be a square chromecast button, tap it, and choose rPlay to connect. The video should play on Pi, it won’t be able to control with this version, we will improve it.

15. Uninstall rplay
$ sudo /etc/init.d/rplay stop$ sudo dpkg -r rplay
16. If rplay is not found by your devices, you can try to toggle WIFI on your devices, turn it off and then on. You may also power off your router then power it on.

You will get the license key and details about rplay installation by register, login and post in Vmlite forum page.

Some posts on the internet say that we should disable the xbmc in order the rplay to running well. You could refer to Raspbmc FAQ here. But in my situation, I don't need to do that and airplay mirroring feature working just fine.

If you have audio problems, please refer to this article. And if your iOS devices don't see rPlay in the AirPlay device list, make sure avahi daemon is running on the Pi device, refer to this article.

So, that's it. Enjoy the features in airplay and airplay mirroring with rplay in Raspberry Pi :)

Thursday, March 13, 2014

Adding Secondary IP Address in Ubuntu (Linux in general)

In my works, sometimes I need to configure router/wireless router with my PC. But since my PC only has one ethernet port that configured with static IP address, I have to find a way to be able to configure the router/wireless router without unplug it. One way is by adding secondary (virtual) IP address on existing ethernet port.

You can do this by using temporary or permanent way.

Temporary way:
Pretend that your ethernet is eth0, and you know that DHCP block IP from the router/wireless router is, you can set static IP address in that range:
$ sudo ip addr add dev eth0
And when you finished, you can just delete that temporary additional IP:
$ sudo ip addr del dev eth0

Permanent way:
You can add permanently by adding config in /etc/network/interfaces file:
auto eth0:1
iface eth0:1 inet DHCP
Then you set eth0:1 to be up:
$ sudo ifup eth0:1
Check to make sure you've got the correct IP address assignment:
$ sudo ifconfig -a | grep eth0 

Wednesday, March 12, 2014

Using and Samba Share External HardDisk on CentOS (Linux in General)

The scenario is I want to use an old PC (1GB RAM, HDD 20GB, Pentium-class) as a Samba share (file server). So I installed CentOS 6.5 on it, put a 3TB external HDD on it and then doing this configuration:
1. Migrating /home partition to 3TB external HDD
2. Configuring samba
3. Adding user and share

1. Migrating /home partition to 3TB external HDD:
I'm using this URL as a guidance, but I re-write this as simple as I have done:
a. Check the UUID of external HDD
$ sudo blkid
b. Backup /etc/fstab
$ sudo cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d) 
c. Compare the two fstab files
$ cmp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
d. Edit original /etc/fstab
# (identifier) (location) (format) (some settings)
UUID=???   /mnt/home   ext3   defaults   0   2
replace the ??? in UUID with the one you've got from blkid command for your HDD

e. Create the mount folder
$ sudo mkdir /mnt/home
f. Reload the updated /etc/fstab
$  sudo mount -a
g. Copy existing /home to new partition
$ sudo rscync -aXS --exclude='/*/.gvfs' /home/. /mnt/home/
h. Confirm that all files and folders are copied successfully
$ sudo diff -r /home /mnt/home
i. Edit /etc/fstab, preparing for switch
# (identifier) (location) (format) (some settings)
UUID=???   /home      ext3       defaults   0   2
j. Moving /home to /old_home
$ cd / && sudo mv /home /old_home && sudo mkdir /home
k. Reload the updated /etc/fstab
$ sudo mount -a 
2. Configuring Samba:
a. Edit /etc/samba/smb.conf
security = user
     path = /home
     browseable = yes
     writable = yes
     public = yes
     guest ok = yes
b. Restart Samba service
$ service smb restart
$ service nmb restart 
3. Adding User and share:
a. Add samba user without UNIX login:
$ useradd -s /sbin/nologin [username]
b. Set samba password for new user:
$ smbpasswd -a [username]
c. Put the new user in the user group:
$ usermod -a -G [username] [usergroup] (e.g. usermod -a -G andy andy)
d. Set priviledge to certain folder only available to certain user/group:
$ chmod 775 /home/[username] 

You can check that there will be new folder created under /home with username you create. Using this command:
$ ls -lart /home
You can see that each of that folder own by username, this way when another username access the samba share, they can see another user folder, but don't have the priviledge to access them. This config already tested in my office with many users using different OS (Windows, Mac, Linux).

Monday, February 10, 2014

Use Python2.6 (instead of Python2.7) on Ubuntu Server 12.04

Ubuntu Server 12.04 comes with Python version 2.7 by default. Unfortunately, there are some apps development out there that still using Python 2.6. Here are some simple workaround to change the default Python2.7 to Python2.6:

1. Preliminary requirement:
$ sudo apt-get install python-software-properties
2. Adding PPA (because Python2.6 is not available anymore on Ubuntu Server 12.04, by default):
$ sudo add-apt-repository ppa:fkrull/deadsnakes
3. Update repository:
$ sudo apt-get update
4. Installing Python2.6:
$ sudo apt-get install python2.6 python2.6-dev
5. Change the symlink to Python2.6:
$ sudo ln -sfn /usr/bin/python2.6 /usr/bin/python
6. Check the version:
$ python --version

That's it, and you're done :)