Welcome! Log In Create A New Profile

Advanced

Rescue System v2

Posted by Jeff 
Rescue System v2
February 17, 2011 11:09AM
I've updated the Rescue System with support for the new arcNumber (Dockstar & GoFlex Net) and support for runlevels via a new sysvinit based startup and a few new utilities. I've dropped the zcip configuration, because it never really worked anyways.

This will replace the Pogoplug kernel on mtd1 and the Pogoplug system on mtd2 with a more sophisticated system.

What's new in this release:
  • Kernel support for Dockstar/GoFlexNet arcnumbers
  • cleaner 'first-boot' initialization scripts
  • sysvinit
  • sqlite3
  • iptables
  • microperl
  • udev
  • lsof
  • socat
  • openvpn

The rescue system includes:
  • ipkg
  • ext2/3/4 create and repair utilities
  • ubifs support/utilities
  • flash/nand utilities
  • md/raid support/utilities
  • ntfs-3g
  • xfs support/utilities
  • reiserfs support
  • nfs support
  • lvm support/utilities
  • ssh/sshfs/openssl
  • openvpn
  • iptables
  • wget/curl/links/ncftp/rsync
  • vi/nano
  • screen
  • sqlite3
  • kernel 2.6.32-18 with dockstar/goflex patches + tons of modules for whatever you may have connected

The default login is 'root' with password 'root'

The installer will check to make sure you're running the latest uBoot, so make sure you upgrade that before anything else. If you don't want to upgrade uBoot, you can comment out the check as long as you're not running the stock Pogoplug uBoot.

Boot from a USB device (or a Debian NAND install) and run the following commands:
cd /tmp
wget http://jeff.doozan.com/debian/rescue/install_rescue.sh
chmod +x install_rescue.sh
./install_rescue.sh

The system is based on buildroot which is a pretty nice tool for this sort of thing. If you'd like to build your own images, you can do so with the following commands:
cd /usr/src
wget http://buildroot.uclibc.org/downloads/buildroot-2010.08.tar.gz
tar -xzvf buildroot-2010.08.tar.gz
cd buildroot-2010.08
git clone https://github.com/doozan/RescueSystem.git custom
cp custom/buildroot-config .config
make

If you're compiling on a multi-core machine, you may want to do 'make menuconfig' before 'make' and adjust 'number of jobs to run simultaneously' under 'build options' Be prepared to wait, the entire build process will likely take many hours.

After you've built the image, you can create the flashable images with the following commands:
cd output/images

cat <<END >rootfs.cfg
[ubifs]
mode=ubi
image=rootfs.ubifs
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
END

ubinize -o rootfs-mtd2.img -m 2048 -p 128KiB -s 512 rootfs.cfg
dd if=uImage of=uImage-mtd1.img bs=512K conv=sync


I'm more than happy to accept patches against this to add any requested features.

-- Jeff



Edited 2 time(s). Last edit at 02/17/2011 03:43PM by Jeff.
Re: Rescue System v2
February 17, 2011 11:32AM
If anyone would like help contribute to the Rescue System effort, here are a few good projects in need of someone to tackle them:

- Johannes made a great mod of the original system. I haven't tried it, but it should be possible to integrate his mods and have a build script that will build both the flashable .img files and the bootable ram image.

- A newer buildroot (2011.02) is almost ready. Upgrading could be as simple as copying the config and doing 'make oldconfig', but most it will require a few fix-ups to the init scripts.

- We're still on kernel 2.6.32, because that's what Debian uses and I started with their config file as a base. There's no good reason that we can't move to something newer.

I will happy help anyone get started on these, but I just don't have the free time right now to work on them myself!

-- Jeff



Edited 2 time(s). Last edit at 02/17/2011 11:49AM by Jeff.
Johannes
Re: Rescue System v2
February 20, 2011 01:25PM
To create the ramdisk based version of the rescue system (in parallel with the UBIFS version):
  • working directory is buildroot-2010.08
  • correct a bug in the 2010.08 version of buildroot by applying the patch:
    custom/buildroot-patch:
    --- original/linux/linux.mk 2010-10-29 00:00:00.000000000 +0000
    +++ new/linux/linux.mk 2010-10-29 00:00:00.000000000 +0000
    @@ -104,9 +104,6 @@
    $(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_INITRD,$(@D)/.config)
    $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,\"$(BINARIES_DIR)/rootfs.initramfs\",$(@D)/.config)
    $(call KCONFIG_ENABLE_OPT,CONFIG_INITRAMFS_COMPRESSION_GZIP,$(@D)/.config)
    -else
    - $(call KCONFIG_DISABLE_OPT,CONFIG_BLK_DEV_INITRD,$(@D)/.config)
    - $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,\"\",$(@D)/.config)
    endif
    $(TARGET_MAKE_ENV) $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) oldconfig
    $(Q)touch $@

      patch -p1 -i custom/buildroot-patch

    This bug is fixed in the next version of buildroot, see http://git.buildroot.net/buildroot/commit/?id=ee3f319249e146d92b093ad8c45a3a908d44236f
  • enable the kernel's initrd support. Replace line 81 of the custom/linux-2.6.32.18-config file:
    # CONFIG_BLK_DEV_INITRD is not set

    with

    CONFIG_BLK_DEV_INITRD=y
    CONFIG_INITRAMFS_SOURCE=""
    CONFIG_RD_GZIP=y
    CONFIG_RD_BZIP2=y
    CONFIG_RD_LZMA=y
  • change the buildroot configuration with "make menuconfig" and enable cpio output of the root filesystem, choose bzip2 compression
  • after "make", add training wheels to rootfs.cpio.bz2 so that uboot can use it:
      mkimage -A arm -O linux -T ramdisk -C bzip2 -a 0 -e 0 -n RescueSystem -d output/images/rootfs.cpio.bz2 output/images/uInitrd  
Re: Rescue System v2
May 12, 2011 04:46AM
Can I install this on a GoFlex Net?
Re: Rescue System v2
May 13, 2011 02:42PM
I have install the rescue system on my GoFlex Net but it will not boot the rescue system. I can still boot my debian system from usb so it's not bricked. I have attached the serial output to this message maybe some will have an idea as too why it doesn't boot.
Attachments:
open | download - serial.txt (1.9 KB)
Re: Rescue System v2
May 13, 2011 03:00PM
What is the output of fw_printenv?



Edited 1 time(s). Last edit at 05/13/2011 03:07PM by varkey.
Re: Rescue System v2
May 13, 2011 03:11PM
ethact=egiga0
bootdelay=3
baudrate=115200
mainlineLinux=yes
console=ttyS0,115200
led_init=green blinking
led_exit=green off
led_error=orange blinking
mtdparts=mtdparts=orion_nand:1M(u-boot),4M(uImage),32M(rootfs),-(data)
mtdids=nand0=orion_nand
partition=nand0,2
rescue_set_bootargs=setenv bootargs console=$console ubi.mtd=2 root=ubi0:rootfs ro rootfstype=ubifs $mtdparts $rescue_customs
rescue_bootcmd=if test $rescue_installed -eq 1; then run rescue_set_bootargs; nand read.e 0x800000 0x100000 0x400000; bootm i
pogo_bootcmd=if fsload uboot-original-mtd0.kwb; then go 0x800200; fi
force_rescue=0
force_rescue_bootcmd=if test $force_rescue -eq 1 || ext2load usb 0:1 0x1700000 /rescueme 1 || fatload usb 0:1 0x1700000 /resi
ubifs_mtd=3
ubifs_set_bootargs=setenv bootargs console=$console ubi.mtd=$ubifs_mtd root=ubi0:rootfs rootfstype=ubifs $mtdparts $ubifs_cus
ubifs_bootcmd=run ubifs_set_bootargs; if ubi part data && ubifsmount rootfs && ubifsload 0x800000 /boot/uImage && ubifsload i
usb_scan=usb_scan_done=0;for scan in $usb_scan_list; do run usb_scan_$scan; if test $usb_scan_done -eq 0 && ext2load usb $use
usb_scan_list=1 2 3 4
usb_scan_1=usb=0:1 dev=sda1
usb_scan_2=usb=1:1 dev=sdb1
usb_scan_3=usb=2:1 dev=sdc1
usb_scan_4=usb=3:1 dev=sdd1
usb_init=run usb_scan
usb_device=0:1
usb_root=/dev/sda1
usb_rootfstype=ext2
usb_rootdelay=10
usb_set_bootargs=setenv bootargs console=$console root=$usb_root rootdelay=$usb_rootdelay rootfstype=$usb_rootfstype $mtdpars
usb_bootcmd=run usb_init; run usb_set_bootargs; run usb_boot
usb_boot=mw 0x800000 0 1; ext2load usb $usb_device 0x800000 /boot/uImage; if ext2load usb $usb_device 0x1100000 /boot/uInitri
bootcmd=usb start; run force_rescue_bootcmd; run ubifs_bootcmd; run usb_bootcmd; usb stop; run rescue_bootcmd; run pogo_boott
ethaddr=00:10:75:26:55:E7
arcNumber=3089
rescue_installed=1
stdin=serial
stdout=serial
stderr=serial

Environment size: 2261/131068 bytes
Re: Rescue System v2
June 18, 2011 12:46PM
To run the Rescue System on the GoFlex Net you need to change the memory address from 0x800000 to something else. I don't know the reason but when I changed it to 0x500000, it booted into the Rescue System perfectly.

So you need to run the following command to make that change

fw_setenv rescue_bootcmd 'if test $rescue_installed -eq 1; then run rescue_set_bootargs; nand read.e 0x500000 0x100000 0x400000; bootm 0x500000; else run pogo_bootcmd; fi'

Although it works with the above settings, what might be the reason that 0x800000 didn't work?

Another problem when running the Rescue System on GoFlex Net is that the LED names are different in the GoFlex so the LED startup scripts fail. Anyway I just had to edit the startup script and replace the 'dockstar' to 'status'
ratskcod
Re: Rescue System v2
June 25, 2011 05:36PM
Dear Jeff,

would you be so kind as to build a new version based on build root 1105 or to give some detailed information to build for my own?

thanks
willi
Rescue System v2 DHCP
August 17, 2011 06:31PM
Dear Jeff,

Thank you for your script! I have your Rescue System installed. The network is not running. It does not get ip from DHCP. Manually with ifconfig and route, I can assign an ip. Then you can access via ssh. But then the dns is not yet. resolv.conf you can not even describe. Do you have any idea, why not go dhcp, or how I can make one by hand dns resolution?

Sorry for my bad english.

Willi
Re: Rescue System v2
September 19, 2011 06:14AM
Hi all,
first of all.. thank you so much for your work and for sharing this with everyone..
I've installed this rescue system to fs.check my partitions before start the system, exsplecially the /dev/sda1 ext2 partition which is not checked at boot-time because it is already mounted.
My /dev/sda2 partition is XFS, and I've this error when I try to check the partition:

rescue:~# xfs_check
/bin/xfs_check: line 25: getopts: not found
Usage: xfs_check [-fsvV] [-l logdev] [-i ino]... [-b bno]... special
rescue:~# xfs_check  /dev/sda2
/bin/xfs_check: line 25: getopts: not found
xfs_db: can't load library 'libxfs.so.0'
rescue:~#

It is missing 'libxfs.so.0' , but I can't find it anywhere.
However Is is not a major problem, because I can still check it after the system boot.
Thank you.


edit: I forgot to mention that I've a dockstar with archlinux and rescue system installed..



Edited 1 time(s). Last edit at 09/19/2011 06:15AM by skakz.
Re: Rescue System v2 DHCP
February 13, 2012 08:52PM
I have the same problem.
Kernel is starting, but LED is heartbeating, and it get no IP from DHCP, so no SSH connection possible.
I only can boot my USB Stick Debian but not access the Rescue System (to reinstall my Debian on USB Stick and such things)

willi Wrote:
-------------------------------------------------------
> Dear Jeff,
>
> Thank you for your script! I have your Rescue
> System installed. The network is not running. It
> does not get ip from DHCP. Manually with ifconfig
> and route, I can assign an ip. Then you can access
> via ssh. But then the dns is not yet. resolv.conf
> you can not even describe. Do you have any idea,
> why not go dhcp, or how I can make one by hand dns
> resolution?
>
> Sorry for my bad english.
>
> Willi
maurer
Re: Rescue System v2
March 08, 2012 08:43AM
hi Jeff,

I installed your rescue system on new Dockstar.
Now i want to install openwrt in place of this Recovery system with commands from openwrt wiki:
./blparam "bootcmd=nand read.e 0x800000 0x100000 0x80000; go 0x800000"
flash_eraseall /dev/mtd1
nandwrite /dev/mtd1 openwrt-kirkwood-dockstar-uboot-uImage.bin
flash_eraseall /dev/mtd2
nandwrite /dev/mtd2 openwrt-kirkwood-Dockstar-jffs2-128k.img

Can I enter it like this or do I need to change this ?

Thank you for all your work !
I succeeded in installing this "new" kernel and rescue system onto mtd1 and mtd2 on a Pogoplug V2, and have successfully booted from it. I am super pleased that it seems to recognize my webcam, but in trying to install user tools for the webcam, I have hit a wall.

uname -a shows:
Linux rescue 2.6.32.18-dockstar #1 Thu Feb 17 03:09:57 EST 2011 armv5tel GNU/Linux

Two things have happened that have me perplexed.
1) ssh to the machine at first worked, but now gives me this error:

ssh_exchange_identification: Connection closed by remote host
Which keys do I need to delete or reset while I still have one connection...

2) In attempting to install optware as per these instructions:
http://www.nslu2-linux.org/wiki/Optware/HomePage

I have ended up with a mystery that might have to do with kernels, but seems strange to me. Optware executable files appear in directory listings, show in the which command, but return "No such file or directory" when I attempt to run them. (+x is set)


Pogo_0.5/opt/
:which ipkg
/opt/bin/ipkg
Pogo_0.5/opt/
:ipkg
bash: /opt/bin/ipkg: No such file or directory
Pogo_0.5/opt/
:

Is it a kernel thing, some hidden flag that I have to change, or somthing else like a new running process that prevents executables being found?

If this is a kernel thing, how can I add packages to my system?

Thanks,
TJ
Re: Rescue System v2: Should Optware work w/kernel 2.6.32.18
May 10, 2012 12:17AM
Maybe a V2.1 ?
          Jeff Doozan's
Dockstar/Pogoplug Recovery System

rescue login: root
Password: 
rescue:~# uname -a
Linux rescue 3.3.2-kirkwide #1 Wed May 9 20:31:03 CDT 2012 armv5tel GNU/Linux
rescue:~# ping yahoo.com
PING yahoo.com (98.139.183.24): 56 data bytes
64 bytes from 98.139.183.24: seq=0 ttl=55 time=94.938 ms

I have the kernel set up w/ support for GoFlex Net/Home (with proper NAND chip delay), Dockstar, Zyxel NSA320/310... just need to patch in the LED stuff or Pogoplug E02/V2 still.

AFAICT, everything works... anyone interested in testing it on theirs? (yup, the newer kernel requires an updated U-Boot w/ the L2 cache fix)

----------------------------------------------
...well, almost everything work OOTB...
ntpd: bad address 'pool.ntp.org'
run-parts: /etc/network/if-up.d/ntpd exited with code 1
Starting Network Interface Plugging Daemon: eth0.
Starting sshd: OK
Starting heartbeat LED...
/etc/init.d/S99LED: line 22: can't create /sys/class/

the ntpd message may just be a timing thing... that shouldn't be happening _before_ eth0 is up... and the LED thing is just the fact that I'd forgotten to add in the patches for PogoPlug V2's LEDs. Trivial to fix, only take 15 minutes to re-roll the kernel, IIRC.

=====================================================





Edited 1 time(s). Last edit at 05/10/2012 12:35AM by davygravy.
Rescue V2.1 : correct kernel support for GoFlexNet/Home & Zyxel NSA3x0
May 10, 2012 11:43PM
Tested in Dockstar and PogoplugE02. (DEPRECATED : use either Jeff's V2, the 2.1 that I put up or whatever higher replacement that you see available and test)

Changes:

1. Kernel now supports GoFlex Net/Home completely, with NAND access fix, Zyxel NSA3x0 series.

2. Fixed ntdp failure. (this was easy , rename /etc/init.d/S40network to /etc/init.d/S47network, so it starts _after_ ifplugd. Now the date gets set correctly and ntpd doesn't die. Was this happening in the V2 rescue?)

3. I patched the long-standing $IP/$ip typo in the example/zcip.script... not sure that had any real effect... Maybe "howl" would be a better choice for advertising services... Is avahi overkill on this? Sure would be nice to auto-advertise ssh !

Interested in testing it? It is running (great) on my PogoE02 right now...

DEPRECATED: see above Download them : uImage-mtd1.img and rootfs-mtd2.img, put them on a flashdrive... mount and cd to them and...

flash_eraseall /dev/mtd1
nandwrite /dev/mtd1 uImage-mtd1.img


flash_eraseall /dev/mtd2
ubiformat /dev/mtd2 -s 512 -f rootfs-mtd2.img -y


fw_setenv set_bootargs_rescue 'setenv bootargs console=$console ubi.mtd=2 root=ubi0:rootfs ro rootfstype=ubifs $mtdparts'
fw_setenv bootcmd_rescue 'run set_bootargs_rescue; nand read.e 0x800000 0x100000 0x400000; bootm 0x800000'
fw_setenv bootcmd_pogo 'run bootcmd_rescue'
fw_setenv rescue_installed 1


Also looking at adding in lm-sensors for the Zyxel, so we can have access to fan control/temp readings.

=====================================================





Edited 3 time(s). Last edit at 05/20/2012 12:05PM by davygravy.
@davy I tried booting the above from memory. It seems the rootfs image is corrupt.

GoFlexNet> tftpboot 0x500000 uImage-mtd1.img
Using egiga0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.100
Filename 'uImage-mtd1.img'.
Load address: 0x500000
Loading: #################################################################
         #################################################################
         #################################################################
         ########################################################
done
Bytes transferred = 3670016 (380000 hex)
GoFlexNet> tftpboot 0xe00000 rootfs-mtd2.img
Using egiga0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.100
Filename 'rootfs-mtd2.img'.
Load address: 0xe00000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ################################################################
done
Bytes transferred = 27656192 (1a60000 hex)
GoFlexNet> bootm 0x500000 0xe00000
## Booting kernel from Legacy Image at 00500000 ...
   Image Name:   Linux-3.3.2-kirkwide
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3546296 Bytes = 3.4 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid

Re: Rescue V2.1 : correct kernel support for GoFlexNet/Home & Zyxel NSA3x0
May 11, 2012 04:23PM
Well, a ubifs image is quite different from a initramfs image... apples and oranges... or maybe apples and porcupines - very different things. It certainly isn't corrupt... I just flashed it to my Dockstar/WirelessBridge at work and it works great on it, too.

It did exactly what it should do... it _shouldn't_ be compatible with loading to RAM and running it that way...

You'd have to test it by flashing it to mtdN... you should back up your mtd1 & mtd2 before doing this... and don't mess w/ mtd0 (uboot).

=====================================================





Edited 1 time(s). Last edit at 05/11/2012 05:08PM by davygravy.
Re: Rescue System v2
May 12, 2012 11:41AM
Sorry, I didn't know that. Flashed the images to mtd partitions and works like charm now. Thanks very much.
Re: Rescue System v2
May 12, 2012 11:50AM
I'm working on a revision(s) and a few more lightweight features...

I've tested it out on my Zyxel dual-SATA box, to see how SATA is... and it works.

I'm moving further discussion to ... Rescue V2.1

=====================================================


starbuck
Re: Rescue System v2
May 14, 2012 04:14PM
Hi davygravy,

I want to install your rescue system in flash memory so I can do a fresh install of a new system on my usb stick.

What is the md5sum of the rescue-v3-ntpfixed-3.3.2-Pogo-Dock-SGF-NSA3x0.tar.gz file?

I want to get sure that it is not corrupt before flashing.

Quote
you should back up your mtd1 & mtd2 before doing this

What is the best way to backup mtd1 and mtd2 ?

How could I verify the backup data and compare it?

regards
starbuck
E41
Re: Rescue System v2
July 27, 2012 07:10PM
Hi,

I tried to install the rescue-image v2 as described above using an USB-Stick (via the script mentioned). Well... I think something went horribly wrong. I have still access via netconsole and the rescue system (on the USB-Stick) still boots but there is no chance to boot rescue-image v2 from nand. Nc says:

U-Boot 2011.12 (Feb 12 2012 - 21:33:07)
Seagate FreeAgent DockStar
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q3-67) 4.4.1
GNU ld (Sourcery G++ Lite 2009q3-67) 2.19.51.20090709
Hit any key to stop autoboot:  0 
(Re)start USB...
USB:   Register 10011 NbrPorts 1
USB EHCI 1.00
scanning bus for devices... 2 USB Device(s) found
       scanning bus for storage devices... 0 Storage Device(s) found
** Block device usb 0 not supported

** Invalid boot device **
Creating 1 MTD partitions on "nand0":
0x000002500000-0x000010000000 : "mtd=3"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI error: vtbl_check: volume table check failed: record 0, error 9
UBI error: ubi_init: cannot attach mtd1
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
UBI init error 22
** Block device usb 0 not supported
** Block device usb 1 not supported
** Block device usb 2 not supported
** Block device usb 3 not supported
** Block device usb 0 not supported
** Block device usb 0 not supported
Wrong Image Format for bootm command
ERROR: can't get kernel image!
stopping USB..

NAND read: device 0 offset 0x100000, size 0x400000
NAND read from offset 100000 failed -74
 0 bytes read: ERROR
## Booting kernel from Legacy Image at 00800000 ...
Bad Header Checksum
ERROR: can't get kernel image!
### JFFS2 loading 'uboot-original-mtd0.kwb' to 0x800000
Scanning JFFS2 FS:  done.
find_inode failed for name=uboot-original-mtd0.kwb
load: Failed to find inode
### JFFS2 LOAD ERROR<0> for uboot-original-mtd0.kwb!
resetting ...

Has anyone an idea, what I can do to solve this problem? I'm missin' my dockstar. :( Thank you!
Re: Rescue System v2
July 31, 2012 12:22PM
-----------



Edited 2 time(s). Last edit at 08/06/2012 09:25PM by funtoy1001.
lcg
Re: Rescue System v2
December 02, 2012 04:56PM
@E41

It is still true that RescueV2 cannot be installed from RescueV3 (USB). The script complains about a "not up to date uboot". If one ignores that, the NAND is flashed without any error message, but after reboot it does not start. At the same time the original uboot install script clearly states that the uboot is "up to date". So it is probably not an issue of uboot. However, one can still boot from a Debian (USB) and install RescueV2 from that. It reboots then and the RescueV2 boots without any problem. That worked at least for me. If one has no Debian installation at hand, it should be possible to boot from RescueV3 (USB), adjust the Debian install script to install the rootfs to /dev/sdb1 (because /dev/sda contains the RescueV3) and /etc/fstab will contain only /dev/root (however, the swap should be set properly). Later one can install RescueV2 from the Debian (USB).
Re: Rescue System v2
March 16, 2013 11:02PM
Will this rescue system work on Pogoplug Mobile? or we do have one for it?
Author:

Your Email:


Subject:


Spam prevention:
Please, enter the code that you see below in the input field. This is for blocking bots that try to post this form automatically. If the code is hard to read, then just try to guess it right. If you enter the wrong code, a new image is created and you get another chance to enter it right.
Message: