Bitcoin Forum
November 07, 2024, 04:24:59 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 »  All
  Print  
Author Topic: Super Tutorial Raspberry Pi+Raspbian+CGMiner+TightVNC+WIFI at boot  (Read 18649 times)
jafc76 (OP)
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile WWW
June 13, 2013, 10:57:46 AM
Last edit: July 23, 2013, 03:07:33 AM by jafc76
 #1

Hi, I'm gonna make a super tutorial to make an automatic miner using a Raspberry Pi and a USB ASIC, in my case I'm gonna make the tutorial for a Butterfly Labs ASIC, but will be almost the same for other kind of USB devices.

When you finish the tutorial, the Raspberry Pi and the ASIC will mine in automatic mode, will be plug and mine, if you have a power outage don't worry and if something goes wrong, unplug, plug and ready.

Before to start the tutorial, is important to know the Raspberry Pi IP and to give an static IP, the best way is with your router.


Possible software we need:

- Raspbian, OS .img file (http://downloads.raspberrypi.org/images/raspbian/2013-05-25-wheezy-raspbian/2013-05-25-wheezy-raspbian.zip)

- SD Formatter, to format the SD (https://www.sdcard.org/downloads/formatter_4/)

- Win32imager, to copy the .img file to the SD (http://sourceforge.net/projects/win32diskimager/)

- Putty, SSH client to connect to the Raspberry Pi (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html?)

- TightVNC, client to connect to the Raspberry Pi desktop (http://www.tightvnc.com/download.php)


Tutorial steps

1- Open Putty or any other SSH client and write the Raspberry Pi IP.

2- You will get a security alert, don't worry, say "Yes".

3- Login as: pi

4- Password: raspberry

5- The first thing to do is to change the default username and password:
   - sudo adduser "youruser" --force-badname (without quotation marks)
   - Will ask for the password for that new user two times and other data
   - To give permissions to the new user: sudo visudo
   - Will open the file sudoers.tmp
   - Under the line: root ALL=(ALL:ALL) ALL add: "youruser" ALL=(ALL:ALL) ALL (without quotation marks)
   - At the last line change: pi ALL=(ALL) NOPASSWD: ALL for: "youruser" ALL=(ALL) NOPASSWD: ALL (without quotation marks)
   - CTRL+X to exit, Y to save followed by enter
   - Now we can use sudo with the new user, to check it, use: su "youruser" (without quotation marks) to change to the new user, then: sudo raspi-config, if you can open the configuration tool, the new user is ok, close the configuration tool.
   - Reboot using: sudo reboot
   - Login with the new user
   - Now we are going to erase the user "pi" and the files of this user with the command: sudo deluser --remove-all-files pi
   - Now we have our user ready and the user "pi" doesnt' exist.

6- The next is to update the system with these steps:
   - sudo aptitude update and wait until finish
   - sudo aptitude upgrade Will ask "Do you want to continue?", "Y" to say Yes and wait until finish again
   - Reboot using: sudo reboot

7- The next is to set a few things with the Configuration Tool with these steps:
   - To open the configuration too: sudo raspi-config
              - Activate "Expand Filesystem" to use all the SD card
   - "Internationalisation Options" to change the language, timezone and keyboard layout
   - "Advanced Options"-"Hostname" to set the visible name of the Raspberry Pi on the network.
   - Reboot using: sudo reboot

8- The next is to activate the Wifi network
   - To check if the Raspberry Pi is detecting the USB dongle, use the command: sudo lsusb You should see something similar to this "Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter" but will change depending of the model you connect.
   - Now we need to install the tool to set the wifi parameters using: sudo aptitude install wicd-curses Will ask "Do you want to continue?", "Y" to say Yes and wait until a blue screen, press space to select and enter to add your user to the netdev group and wait until finish
   - To open the tool, use the command: sudo wicd-curses
   - Move the cursor to your wifi network
   - Shift+P to go to Prefs
   - Check "Wireless interface", if it’s empty, write "wlan0" (Without quotation marks)
   - Press F10
   - Shift+R to refresh and see your wifi if you had to write "wlan0"
   - Move the cursor to your wifi
   - Right arrow to go to config
   - You can set here a static IP, but I prefer to set the static IP in my router
   - Activate Automatically connect to this network
   - Key: (write the wifi password)
   - Press F10
   - Shift+C to connect and if you obtain an IP everything is working fine, here, you will lose the connection, use the new IP for the wifi connection and connect with Putty again.
   - Login
   - Shift+Q to quit
   - Turn off using: sudo halt
   - Disconnect the ethernet cable and turn on the Raspberry Pi again, from now should work with wifi
   - From now, connect to the Raspberry Pi using the new Wifi IP

9- Now we are going to install TightVNC
   - Use the command: sudo aptitude install tightvncserver Will ask "Do you want to continue?", "Y" to say Yes and wait until finish
   - To start TightVNC use: tightvncserver
   - Will ask for a password to connect to the remote desktop, it can be different to the Raspberry Pi password, write the password two times
   - Wil ask "Would you like to enter a view-only password?",  "N" to say NO to have a total control of the remote desktop.
   - To autostart TightVNC every time we turn on the Raspberry Pi, we have to edit the file rc.local, using the command: sudo nano /etc/rc.local
   - Now, before the line "exit 0" add the line: sudo -u "youruser" /usr/bin/vncserver :0 -geometry 1280x800 -depth 16 -dpi 100 (The user is without quotation marks, "geometry" is to set the resolution of your screen, "depth" is to set the color depth and "dpi" is to set the font size) so adjust these parameters to your needs.
   - CTRL+X to exit, Y to save followed by enter

10- The last step is to install the miner, CGMiner seems to work very well with the Raspberry Pi so these are the steps:
   - Before to install CGMiner we need to install this dependencies: sudo aptitude install git autoconf libtool libcurl4-openssl-dev libncurses5-dev pkg-config yasm make libusb-1.0-0-dev Will ask "Do you want to continue?", "Y" to say Yes and wait until finish.
   - Now we can start installing CGMiner:
      - git clone git://github.com/ckolivas/cgminer.git cgminer
       - cd cgminer
       - ./autogen.sh
       - export LIBCURL_CFLAGS='-I/usr/include/curl'
       - export LIBCURL_LIBS='-L/usr/lib -lcurl'
       - ./configure --enable-bflsc
       - make
       - sudo make install
   - The last step is to autostart CGMiner every time we turn on the Raspberry Pi:
      -We need to edit autostart with this command: sudo nano /etc/xdg/lxsession/LXDE/autostart
      -At the end add the line: @/usr/bin/lxterminal --geometry=90x35 -e cgminer (The parameter "geometry" is to set the size of CGMiner, so adjust the parameter to your needs)
      -Reboot using: sudo reboot

11- Install TightVNC on your computer
   - Write your Raspberry Pi IP
   - Will ask for the password of TightVNC
   - If everything is ok, you will see the Raspberry Pi desktop and CGMiner open waiting for the server details.
   - Write the URL
   - Write the username
   - Write the password
   - Now will start to mine, but we need to save the configuration file:
      - "S" to go to settings
      - "W" to write the config file
      - "Enter" to save the default "cgminer.conf"
      - "Space" to clean the screen

12- Now everything will work automatic
   - If you need to stop CGMiner, use que key "q"
   - If you need to reboot the Raspberry Pi, use: sudo reboot
   - If you need to turn off the Raspberry Pi, use: sudo halt
   - If you need to modify the config file "bfgminer.conf", open the "File Manager", "View"-"Show Hidden" and click to your user, you will see a folder ".cgminer", and inside you have the file, don't mistake with the folder without "dot".


If you like this post, buy me a beer Wink BTC: 1HFuxCE6WLL4Ct2DDiiX8C9eNnwBhARueh
SoggyLettuce
Full Member
***
Offline Offline

Activity: 238
Merit: 100



View Profile
June 14, 2013, 12:02:37 AM
 #2

Hey man thanks for this...was really helpful in getting things primed for some of those k1 miner's I plan to order.
krasnolud
Member
**
Offline Offline

Activity: 109
Merit: 10



View Profile WWW
June 14, 2013, 10:26:56 AM
 #3

Awesome job, thank you.
My RaspberryPi is already configured and waiting for its ASIC to come...

One small suggestion - to make the guide even more clear you could add two initial steps of SD card formatting and saving the image file to it.
jafc76 (OP)
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile WWW
June 15, 2013, 10:34:30 AM
 #4

Awesome job, thank you.
My RaspberryPi is already configured and waiting for its ASIC to come...

One small suggestion - to make the guide even more clear you could add two initial steps of SD card formatting and saving the image file to it.


You can find that information here:

http://elinux.org/RPi_Easy_SD_Card_Setup

So I think that's not necessary.

I'm waiting an ASIC too.
AmWays
Newbie
*
Offline Offline

Activity: 3
Merit: 0


View Profile
June 20, 2013, 01:09:51 PM
 #5

pi@raspberrypi ~ $ dmesg | grep tty*
[    0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0xd bcm2708.serial=0xb4c85aef smsc95xx.macaddr=B8:27:EB:C8:5A:EF sdhci-bcm2708.emmc_clock_freq=100000000 vc_mem.mem_base=0x1f000000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
[    0.000000] console [tty1] enabled
[    0.577003] dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
[    0.887025] console [ttyAMA0] enabled
[    1.543292] Setting default values for core params
[    1.550245] Finished setting default values for core params
[    6.464775] usb 1-1.2: cp210x converter now attached to ttyUSB0

--------------------------------------------------------------------------------
cgminer version 3.2.2 - Started: [2013-06-19 15:35:51]
--------------------------------------------------------------------------------
 (5s):0.000 (avg):0.000h/s | A:0  R:0  HW:0  U:0.0/m  WU:0.0/m
 ST: 2  SS: 0  NB: 1  LW: 0  GF: 0  RF: 0
 Connected to btcguild.com diff 1 with LP as user plutbobo_1
 Block: 009372e7dbd46435...  Diff:19.3M  Started: [15:35:50]  Best share: 0
--------------------------------------------------------------------------------
 [P]ool management ettings [D]isplay options [Q]uit
--------------------------------------------------------------------------------

 [2013-06-19 15:35:49] No devices detected!
 [2013-06-19 15:35:49] Waiting for USB hotplug devices or press q to quit
 [2013-06-19 15:35:49] Probing for an alive pool
 [2013-06-19 15:35:50] Network diff set to 19.3M
 [2013-06-19 15:35:50] Long-polling activated for http://btcguild.com:8332/LP/
 [2013-06-19 15:35:56] USB init open device failed, err -3, you dont have privil
edge to access - AMU device 1:4
 [2013-06-19 15:35:56] Icarus detect (1:4) failed to initialise (incorrect devic
e?)
 [2013-06-19 15:36:01] USB init open device failed, err -3, you dont have privil
edge to access - AMU device 1:4
 [2013-06-19 15:36:01] Icarus detect (1:4) failed to initialise (incorrect devic
e?)
--------------------------------------------------------------------------------
Please help me, thank you!
jafc76 (OP)
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile WWW
June 20, 2013, 01:28:01 PM
 #6

pi@raspberrypi ~ $ dmesg | grep tty*
[    0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0xd bcm2708.serial=0xb4c85aef smsc95xx.macaddr=B8:27:EB:C8:5A:EF sdhci-bcm2708.emmc_clock_freq=100000000 vc_mem.mem_base=0x1f000000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
[    0.000000] console [tty1] enabled
[    0.577003] dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
[    0.887025] console [ttyAMA0] enabled
[    1.543292] Setting default values for core params
[    1.550245] Finished setting default values for core params
[    6.464775] usb 1-1.2: cp210x converter now attached to ttyUSB0

--------------------------------------------------------------------------------
cgminer version 3.2.2 - Started: [2013-06-19 15:35:51]
--------------------------------------------------------------------------------
 (5s):0.000 (avg):0.000h/s | A:0  R:0  HW:0  U:0.0/m  WU:0.0/m
 ST: 2  SS: 0  NB: 1  LW: 0  GF: 0  RF: 0
 Connected to btcguild.com diff 1 with LP as user plutbobo_1
 Block: 009372e7dbd46435...  Diff:19.3M  Started: [15:35:50]  Best share: 0
--------------------------------------------------------------------------------
 [P]ool management ettings [D]isplay options [Q]uit
--------------------------------------------------------------------------------

 [2013-06-19 15:35:49] No devices detected!
 [2013-06-19 15:35:49] Waiting for USB hotplug devices or press q to quit
 [2013-06-19 15:35:49] Probing for an alive pool
 [2013-06-19 15:35:50] Network diff set to 19.3M
 [2013-06-19 15:35:50] Long-polling activated for http://btcguild.com:8332/LP/
 [2013-06-19 15:35:56] USB init open device failed, err -3, you dont have privil
edge to access - AMU device 1:4
 [2013-06-19 15:35:56] Icarus detect (1:4) failed to initialise (incorrect devic
e?)
 [2013-06-19 15:36:01] USB init open device failed, err -3, you dont have privil
edge to access - AMU device 1:4
 [2013-06-19 15:36:01] Icarus detect (1:4) failed to initialise (incorrect devic
e?)
--------------------------------------------------------------------------------
Please help me, thank you!


If you follow all the steps I wrote should work well.

Do you have something connected to mine?
-Redacted-
Hero Member
*****
Offline Offline

Activity: 574
Merit: 501


View Profile
June 20, 2013, 03:28:08 PM
 #7

Q: On linux I can see the /dev/ttyUSB* devices for my Icarus FPGAs, but
cgminer can't mine on them

A: Make sure you have the required priviledges to access the /dev/ttyUSB* devices:

 sudo ls -las /dev/ttyUSB*
will give output like:
 0 crw-rw---- 1 root dialout 188, 0 2012-09-11 13:49 /dev/ttyUSB0

This means your account must have the group 'dialout' or root privileges

To permanently give your account the 'dialout' group:
 sudo usermod -G dialout -a `whoami`
Then logout and back in again
shawtux
Newbie
*
Offline Offline

Activity: 57
Merit: 0


View Profile
June 21, 2013, 03:03:16 AM
 #8

i personally prefer not using the gui. its a system hog

using "screen" command in console allows me to access the bfgminer thats running behind the scenes without stopping anything.

and cacti allows me to see charts via web Cheesy
jafc76 (OP)
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile WWW
June 21, 2013, 05:09:02 AM
 #9

Q: On linux I can see the /dev/ttyUSB* devices for my Icarus FPGAs, but
cgminer can't mine on them

A: Make sure you have the required priviledges to access the /dev/ttyUSB* devices:

 sudo ls -las /dev/ttyUSB*
will give output like:
 0 crw-rw---- 1 root dialout 188, 0 2012-09-11 13:49 /dev/ttyUSB0

This means your account must have the group 'dialout' or root privileges

To permanently give your account the 'dialout' group:
 sudo usermod -G dialout -a `whoami`
Then logout and back in again


If you are using an Icarus FPGA, don't forget to configure CGMiner (Step 10 of the tutorial) with:   ./configure --enable-icarus



i personally prefer not using the gui. its a system hog

using "screen" command in console allows me to access the bfgminer thats running behind the scenes without stopping anything.

and cacti allows me to see charts via web Cheesy

Can you explain the steps? Would be nice if I can try that.
netfun2000
Member
**
Offline Offline

Activity: 66
Merit: 10



View Profile
June 25, 2013, 03:19:20 AM
 #10

How to update New cgminer ?

thx
Subo1977
Sr. Member
****
Offline Offline

Activity: 344
Merit: 250


Flixxo - Watch, Share, Earn!


View Profile
June 25, 2013, 05:43:25 AM
 #11

How to update New cgminer ?

thx


in terminal:

cd cgminer
  git pull
       ./autogen.sh
       export LIBCURL_CFLAGS='-I/usr/include/curl'
        export LIBCURL_LIBS='-L/usr/lib -lcurl'
       ./configure --enable-bflsc
        make
        sudo make install

X       ▄▄█████████▄▄
    ▄██▀▀         ▀▀██▄
  ▄██▀              ▀██▄
 ▄██     ██▄▄          ██▄
▄██      █████▄▄        ██▄
██       ████████▄▄      ██
██       ███████████▄    ██
██       ██████████▀     ██
▀██      ███████▀       ██▀
 ▀██     ████▀         ██▀
  ▀██▄   █▀          ▄██▀
    ▀██▄▄         ▄▄██▀
       ▀▀█████████▀▀
.flixxo    X▄████████████████████▄
██████████████████████
██████████████████████
████████████▀▀███████
█████▀████░░░░░░▄████
█████░░░░░░░░░░▄█████
█████▄░░░░░░░░░░██████
██████░░░░░░░░░███████
███████░░░░░░▄████████
████▄▄░░░░▄▄██████████
██████████████████████
██████████████████████
▀████████████████████▀
▄████████████████████▄
██████████████████████
█████████▀█▀██████████
██████▀▀▀▀▀████████
██████▄▄░░▄▄▄░░███████
████████░░███░░███████
████████░░░░░░▀███████
████████░░███▄░░██████
██████▀▀░░▀▀▀░░░██████
██████▄▄▄▄▄▄███████
█████████▄█▄██████████
██████████████████████
▀████████████████████▀
X[[]]X
cchan
Sr. Member
****
Offline Offline

Activity: 379
Merit: 250


View Profile
June 25, 2013, 05:49:21 AM
 #12

Cool. Thanks for your sharing.
I want to use Raspberry Pi to control my blade.
It also should be possible.
2weiX
Legendary
*
Offline Offline

Activity: 2058
Merit: 1005

this space intentionally left blank


View Profile
July 03, 2013, 08:59:00 PM
 #13

Followed all the steps, until now the best tutorial about "Wi-Pi Mining" I read.


should add:

- vncwiever pwd is truncated to EIGHT places. I was hammering away my usual 20-digit pwd.
- followed all the steps, didn't work so far. probably something with my router which blocks prettey much everything. maybe include the Pi as a hotspot/wifi repeater as well?


where is this --> '   character on the us keyboard layout?
micalith
Hero Member
*****
Offline Offline

Activity: 894
Merit: 501



View Profile
July 09, 2013, 03:20:37 PM
 #14

Great tutorial. Thanks for putting it together    Smiley



   - The last step is to autostart CGMiner every time we turn on the Raspberry Pi:
      -We need to edit autostart with this command: sudo nano /etc/xdg/lxsession/LXDE/autostart
      -At the end add the line: @/usr/bin/lxterminal --geometry=90x35 -e cgminer (The parameter "geometry" is to set the size of CGMiner, so adjust the parameter to your needs)
      -Reboot using: sudo reboot


Everything went smooth until this bit. When I reboot, cgminer won't start automatically. I'm using cgminer 3.1.1 with Erupter USBs. Might the older cgminer be why it doesn't work?

Anyway, I wrote this script with nano, called it auto_cgminer, and saved it in my 'code' folder,

Code:
cd /home/pi/cgminer-3.1.1/
./cgminer -S /dev/ttyUSB0 -S /dev/ttyUSB1 -S /dev/ttyUSB2 -S /dev/ttyUSB3  -S /dev/ttyUSB4 -S /dev/ttyUSB5 -S /dev/ttyUSB6 -S /dev/ttyUSB7 -S /dev/ttyUSB8 -S /dev/ttyUSB9 --config /home/pi/cgminer-3.1.1/cgminer.conf

then entered

 @/usr/bin/lxterminal --geometry=90x35 -e code/auto_cgminer

in stead of

 @/usr/bin/lxterminal --geometry=90x35 -e cgminer

into the /etc/xdg/lxsession/LXDE/autostart file. Now it gets mining straight away to config file specs on startup.


Now here I got stuck:
11- Install TightVNC on your computer
   - Write your Raspberry Pi IP
   - Will ask for the password of TightVNC
   - If everything is ok, you will see the Raspberry Pi desktop and CGMiner open waiting for the server details.
   - Write the URL
   - Write the username
   - Write the password
   - Now will start to mine, but we need to save the configuration file:
      - "S" to go to settings
      - "W" to write the config file
      - "Enter" to save the default "bfgminer.conf"
      - "Space" to clean the screen

I installed TightVNC onto my Ubuntu 11.10 computer, just as I had done as instructed here for the Pi. Then I don't know how to start it up so that I can do the second step, "Write your Raspberry Pi IP". Entering tightvnc or tightvncserver into terminal don't give me an option to enter the Pi's IP... What did I miss?
micalith
Hero Member
*****
Offline Offline

Activity: 894
Merit: 501



View Profile
July 09, 2013, 03:22:07 PM
 #15

Followed all the steps, until now the best tutorial about "Wi-Pi Mining" I read.


should add:

- vncwiever pwd is truncated to EIGHT places. I was hammering away my usual 20-digit pwd.
- followed all the steps, didn't work so far. probably something with my router which blocks prettey much everything. maybe include the Pi as a hotspot/wifi repeater as well?


where is this --> '   character on the us keyboard layout?

doesn't this 8 spaces password limitation make it vulnerable to hackers?
xgtele
Sr. Member
****
Offline Offline

Activity: 288
Merit: 250



View Profile
July 21, 2013, 02:33:21 PM
 #16

Awesome tutorial! I learned a lot  Smiley
server
Legendary
*
Offline Offline

Activity: 892
Merit: 1002


1 BTC =1 BTC


View Profile
July 21, 2013, 06:39:32 PM
 #17

Thanks man, great tut!

Cheers ;-)


jafc76 (OP)
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile WWW
July 22, 2013, 06:17:18 AM
 #18


Wow Server! Thank you very much! You are the first person that paid a beer!!

Cheers!! Glad to find nice people like you!! Smiley

This is a good motivation to add a few things to the tutorial like the watchdog and permissions to the user to access the plugdev group.

Thanks again!
-ck
Legendary
*
Offline Offline

Activity: 4284
Merit: 1645


Ruu \o/


View Profile WWW
July 22, 2013, 02:33:10 PM
 #19

Q: On linux I can see the /dev/ttyUSB* devices for my Icarus FPGAs, but
cgminer can't mine on them

A: Make sure you have the required priviledges to access the /dev/ttyUSB* devices:

 sudo ls -las /dev/ttyUSB*
will give output like:
 0 crw-rw---- 1 root dialout 188, 0 2012-09-11 13:49 /dev/ttyUSB0

This means your account must have the group 'dialout' or root privileges

To permanently give your account the 'dialout' group:
 sudo usermod -G dialout -a `whoami`
Then logout and back in again
You are providing instructions from CGMINER 3.1.1

The opening post uses the current cgminer from git WHICH DOES NOT USE ttyUSB

Don't confuse instructions from different versions please.

Developer/maintainer for cgminer, ckpool/ckproxy, and the -ck kernel
2% Fee Solo mining at solo.ckpool.org
-ck
jafc76 (OP)
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile WWW
July 22, 2013, 07:16:15 PM
 #20

Xgtele, here the master is ckolivas but if you wanna use the erupters, change:

./configure --enable-bflsc

For

./configure --enable-icarus

I don't have any erupter but if I'm not wrong, with that should work
Pages: [1] 2 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!