Welcome! Log In Create A New Profile

Advanced

Pogoplug e02

Posted by Teldo 
Pogoplug e02
May 29, 2024 03:16PM
So sorry to disturb you but could not ask in the topic, PM does not work either.
i thought perhaps you agreed help me install 6.5.7 rootfs on Pogoplug E02?

I tried this tutorial miim.com/thebside/e04linux/indextoto.shtml but did not work, URLs are gone 10 years after.

I have this bootloader:
e84a5fd0a0205bb79aed07c3c6fbd145 pinkpogo davygravy-2012-02-20-current

I formatted usb flash drive to ext3 (ext2 SEC_TYPE) on rasbpian, unpacked 6.5.7 rootfs bz2, pogo did not boot.

would be possible fix this without flashing new bootloader?
Re: Pogoplug e02
May 29, 2024 04:32PM
Teldo,

> I have this bootloader:
> e84a5fd0a0205bb79aed07c3c6fbd145 pinkpogo
> davygravy-2012-02-20-current
>
> I formatted usb flash drive to ext3 (ext2
> SEC_TYPE) on rasbpian, unpacked 6.5.7 rootfs bz2,
> pogo did not boot.
>
> would be possible fix this without flashing new
> bootloader?

Normally I would recommend to connect serial console so we can see clearly why it did not boot. However, if I remember correctly how davygravy 2012 u-boot works, there is no need to install new u-boot, or connect serial console yet. But you need to treat this u-boot as stock u-boot.

I think you might have created the rootfs incorrectly. You need to follow the instruction in the release thread very closely.

Quote
https://forum.doozan.com/read.php?2,12096
Installation:

Installation can be done on any Linux box, with a fresh USB drive (HDD would work fine too).

Warning: If you want to install this rootfs on SD card (such as for the Pogo V4 or Sheevaplug), then you need to see Note 8 below before doing the installation.

Note: all steps below must be done while logging in as root user (not sudo). If you are not the root user then don't continue, because the rootfs will not work.

1. Format a new USB drive with a single Ext3 partition, and label it rootfs. This step should be done at Linux command line using fdisk, mkfs.ext3 (don't use GUI or gparted). Once you have booted the box, then you could try GPT partition and/or Ext4.

If you are running the latest U-Boot for Kirkwood then you can use Ext4. But be aware that Ext4 file system format needs to be "finalized" before it can be used for booting.

2. Mount the drive on a Linux box. cd to top level directory and extract it. It is assuming the USB drive is mounted at /media/sdb1
cd /media/sdb1
tar xjf Debian-6.5.7-kirkwood-tld-1-rootfs-bodhi.tar.bz2

3. Adjust fstab (optional).

Edit /media/sdb1/etc/fstab entry for root device to match the rootfstype of your rootfstype if you use Ext4 or Ext2. However, you can keep it as is without problem in booting since the kernel will figure out which file system the rootfs was formatted.

LABEL=rootfs / ext3 noatime,errors=remount-ro 0 1

4. (Stock u-boot only) Create uImage with embedded DTB for booting with older u-boots (2012 or earlier). Skip this step if you have installed the latest U-Boot for Kirkwood (or are installing this u-boot at the same time, or running kwboot with latest u-boot image).

Please replace kirkwood-goflexnet.dtb below with the correct DTB name for your box (see the folder /media/sdb1/boot/dts for the exact spelling of your Kirkwood box name).

Generate the uImage with DTB embedded inside:
cd /media/sdb1/boot
cp -a zImage-6.5.7-kirkwood-tld-1 zImage.fdt
cat dts/kirkwood-goflexnet.dtb >> zImage.fdt
mv uImage uImage.orig
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-6.5.7-kirkwood-tld-1 -d zImage.fdt uImage
sync

If your Linux box does not have mkimage, then install it
apt-get install u-boot-tools

5. Done.

If you are installing on a Kirkwood box that runs stock u-boot (it is not on the new u-boot support list) then see
Boot Kirkwood rootfs with stock u-boot.

Take this USB rootfs to your plug and cold start. After booted into Debian, see Note 1-6 below.

Note 1 (Strongly Recommended):

To keep the rootfs extremely basic and small, there is no swap space set up for it. The first thing you should do after the 1st boot is to set up a swap file to make the system run better. In fact, system upgrades oftently fail to run without swap. Please see here for instruction how to do that.


Note 2 (Optional):

The rootfs will automatically generate new SSH keys at 1st boot (see /etc/rc.local). However, if you would like to generate the keys again then do:

rm /etc/ssh/ssh_host*
ssh-keygen -A

Note 3 (Optional):

Update your rootfs to get the latest Debian package security updates (if the installation is done at a much later date than the time of this release).

Check the system clock to make sure it is the current time (boxes without RTC is using NTP so quite slow to update the clock).

date
And upgrade
apt-get update
apt-get upgrade

Warning: Watch the apt-get upgrade progress. If the apt-get upgrade results in a new initramfs, the log would shows this message:
update-initramfs: Generating /boot/initrd.img-6.5.7-kirkwood-tld-1

Then you need to regenerate the uInitrd boot file:
cd /boot
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-6.5.7-kirkwood-tld-1 -d initrd.img-6.5.7-kirkwood-tld-1 uInitrd

For boxes without RTC , also consider install fake-hwclock to ensure the clock is relatively close to real time after a reboot or cold start.
apt-get install fake-hwclock

Note 4 (Optional):

Some network environment is not very robust in propagating the host name advertised by avahi. If you cannot find the host name (debian.local) of this rootfs in your network, or you cannot find the other hosts by name, you need to install libnss-mdns.

apt-get install libnss-mdns

Note 5 (Optional):

Note 5.1. To boot with systemd

After loged into Debian, run:

apt-get install systemd
And then add parameter init=/usr/bin/systemd to your u-boot env bootargs.

- For example,
fw_setenv set_bootargs 'setenv bootargs console=ttyS0,115200 root=LABEL=rootfs rootdelay=10 $mtdparts init=/usr/bin/systemd'
- Or, if you are booting with my latest u-boot images you can also use the uEnv.txt capability to do this. In the default envs, custom_params is a variable that allows you to add extra bootargs. So add the following line to uEnv.txt:
custom_params=earlyprintk=serial init=/usr/bin/systemd

Note 5.2. To boot back to sysvinit

Reverse the env setting (there is no need to remove systemd, you can switch back and forth from/to sysvinit and systemd):
fw_setenv set_bootargs 'setenv bootargs console=ttyS0,115200 root=LABEL=rootfs rootdelay=10 $mtdparts'
Or if you've used uEnv.txt then just remove that from the custom_params env
custom_params=earlyprintk=serial

Note 6. Shrink initramfs to smaller size (Optional):

In Debian bookworm, the default compression is zstd. However, to keep it simple, the initramfs (initramfs-6.5.7-kirkwood-tld-1) in this rootfs was compressed using gzip, which is perfectly OK. If you need to have a smaller initramfs (for example, you are trying to fit it in a limited sized NAND partition), see here for tutorial: How To Shrink initramfs.

Note 7. Ethernet Naming Issue (Optional):

In Debian 12.4, the ethernet "Predictable Names" scheme is enabled. So the ethernet device assigned is no longer "eth0", but is "end0". This "predictable naming" scheme broke a lot of existing applications that still relying on "eth0" is the network device name. It does not affect this Kirkwood rootfs (due to some setup I had in the past).

However, if after a future Debian upgrade of this rootfs, the network is no longer eth0, then this is the way to bring it back.

cat /etc/network/interfaces
rename /end0=eth0
auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp
Beware of software apps, such as OMV, that do not respect users' configuration and so wiping out this change during its installation! I'd suggest to make a backup of this file, so you can compare that with any new /etc/network/interfaces after installing OMV, and restore the rename command.

There are also many other ways to force the eth0 name. However, it is more cumbersome to do than just watching out for this file being changed by OMV or other major apps installation. Also, other methods might not survive a future Debian upgrade :)

Note 8 (Required for SD card rootfs, Optional for all other storage devices):

If you are installing this rootfs for the Pogo V4 or the Sheevaplug on SD card, it is best to use a USB-SD adapter and install boot the box with USB first. After it booted successfully, install the latest kernel (linux-6.6.3-kirkwood-tld-1, at the time of this writing). Reboot to make sure it is running OK. Shutdown and then boot with the SD card in its slot.

Also see this post for further detailed explanation and other approaches in booting this rootfs on SD card.


Being root (not using sudo), create 1 partition Ext2/Ext3 on the USB, label it rootfs. And then extract the rootfs tarball as described in Steps 1-5. During Steps 1-5, you must be the root user.

And since you are running with old u-boot you need to do Step 4 with the Pogo E02 dtb file.

Quote

4. (Stock u-boot only) Create uImage with embedded DTB for booting with older u-boots (2012 or earlier). Skip this step if you have installed the latest U-Boot for Kirkwood (or are installing this u-boot at the same time, or running kwboot with latest u-boot image).
....
cat dts/kirkwood-pogo_e02.dtb >> zImage.fdt
.....

=====

If it still does not boot, you should connect serial console (the header in this box is already populated, no soldering needed).

Or you can post the entire session how you create the rootfs here, perhaps I can spot some errors.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 15, 2025 09:25PM
So sorry could not get respond earlier.
I manged prepare flash drive but booting probably hangs, green light does not come up, no pings, no dhcp requests.
I used kirkwood-e02.dtb in step 4.
I know you wrote in other thread a different unitrd address - for stock uboot (0x21 vs 0x11 i have) , but my env works with arch linux arm.
Please take a look:

mtdids=nand0=orion_nand
mtdparts=mtdparts=orion_nand:1M(u-boot),4M(uImage),32M(rootfs),-(data)

bootcmd=usb start; run force_rescue_bootcmd; run ubifs_bootcmd; run usb_bootcmd; usb stop; run rescue_bootcmd; run pogo_bootcmd; reset

usb_boot=mw 0x800000 0 1; ext2load usb $usb_device 0x800000 /boot/uImage; if ext2load usb $usb_device 0x1100000 /boot/uInitrd; then bootm 0x800000 0x1100000; else bootm 0x800000; fi
usb_bootcmd=run usb_init; run usb_set_bootargs; run usb_boot
usb_rootfstype=ext2

U-Boot 2011.12 (Feb 20 2012 - 21:21:59)
Pogoplug E02

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

Loading file "/boot/uImage" from usb device 0:1 (usbda1)
1 bytes read
Found bootable drive on usb 0:1
Loading file "/boot/uImage" from usb device 0:1 (usbda1)
6234266 bytes read
Loading file "/boot/uInitrd" from usb device 0:1 (usbda1)
5791271 bytes read
## Booting kernel from Legacy Image at 00800000 ...
Image Name: Linux-6.5.7-kirkwood-tld-1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 6234202 Bytes = 5.9 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 01100000 ...
Image Name: initramfs-6.5.7-kirkwood-tld-1
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 5791207 Bytes = 5.5 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Using machid 0xdd6 from environment

Starting kernel ...
Re: Pogoplug e02
February 15, 2025 09:32PM
Teldo,

> I used kirkwood-e02.dtb in step 4.
> I know you wrote in other thread a different
> unitrd address - for stock uboot (0x21 vs 0x11 i
> have) , but my env works with arch linux arm.

Use 0x02100000 for uInitrd. It should work for Arch also. Try it without saving the envs.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 16, 2025 11:50PM
No joy but old Archlinuxarm also does not boot.
Re: Pogoplug e02
February 17, 2025 03:08AM
Teldo,

Your log is missing usb_set_bootargs env, so I can't tell what's wrong yet.

For now just get the complete boot log.

Power up, interrupt u-boot countdown. And set the envs as you want to boot USB rootfs. Before booting, get the list of all envs

printenv
boot
And then post the entire serial console log here (don't post excerpt).

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 17, 2025 02:02PM
Thank you Bodhi for responding, I dont have serial, i used netconsole.
I added commands history to show how archlinux was instaled years ago.
All i did was power on e02 with no stick, log in, insert usb stick with debian and reboot.

root@linux ~ # ssh root@192.168.1.2
root@192.168.1.2's password:
Pogoplug:~$ uname -a
Linux Pogoplug 2.6.22.18 #81 Tue Oct 19 16:05:00 PDT 2010 armv5tejl unknown
Pogoplug:~$ history
1 ll
2 ls -la
3 pwd
4 ps
5 df -h
6 free
7 uptime
8 uname -a
9 ll /tmp/
10 ls -la /
11 ls -la /tmp/
12 ls -la /etc/
13 ct /etc/passwd
14 cat /etc/passwd
15 cat /etc/shells
16 ls
17 ps
18 ps
19 ps |grep hbwd
20 ps
21 ps|grep hbwd
22 date
23 uname -a
24 ps
25 uptime
26 free
27 pwd
28 cd /tmp
29 df -h
30 pwd
31 wget http://jeff.doozan.com/debian/uboot/install_uboot_mtd0.sh
32 ls -la
33 chmod +x install_uboot_mtd0.sh
34 ls -la
35 ./install_uboot_mtd0.sh
36 df -h
37 ls -l /dev/sd*
38 ls -l /dev/sda
39 /sbin/fdisk /dev/sda
40 pwd
41 ls -la
42 ps
43 wget http://archlinuxarm.org/os/pogoplug/mke2fs
44 ls -la
45 chmod 755 mke2fs
46 ls -la
47 /sbin/fdisk -l /dev/sda
48 ./mke2fs /dev/sda1
49 which tune2fs
50 pwd
51 mkdir usb
52 ls -la
53 mount /dev/sda1 usb
54 mount
55 df -h
56 cd usb
57 pwd
58 wget http://archlinuxarm.org/os/ArchLinuxARM-armv5te-latest.tar.gz
59 pwd
60 ls -la
61 tar -xzvf ArchLinuxARM-armv5te-*.tar.gz
62 df -h
63 rm ArchLinuxARM-armv5te-*.tar.gz
64 ls -la
65 sync
66 cd ..
67 mount
68 umount usb
69 ls -l /sbin/reboot
70 mount
71 ls -la
72 /sbin/reboot
Pogoplug:~$ printenv
TERM=xterm
SHELL=/bin/bash
SSH_TTY=/dev/pts/0
USER=root
PATH=/usr/bin:/bin:/sbin
PWD=/root
PS1=\h:\w$
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.1.7 36738 192.168.1.2 22
_=/bin/printenv
Pogoplug:~$
Pogoplug:~$ /usr/sbin/fw_printenv
arcNumber=3542
baudrate=115200
bootcmd=usb start; run force_rescue_bootcmd; run ubifs_bootcmd; run usb_bootcmd; usb stop; run rescue_bootcmd; run pogo_bootcmd; reset
bootdelay=10
console=ttyS0,115200
ethact=egiga0
ethaddr=00:25:31:06:1A:xx
force_rescue=0
force_rescue_bootcmd=if test $force_rescue -eq 1 || ext2load usb 0:1 0x1700000 /rescueme 1 || fatload usb 0:1 0x1700000 /rescueme.txt 1; then run rescue_bootcmd; fi
if_netconsole=ping $serverip
led_error=orange blinking
led_exit=green off
led_init=green blinking
machid=dd6
mainlineLinux=yes
mtdids=nand0=orion_nand
mtdparts=mtdparts=orion_nand:1M(u-boot),4M(uImage),32M(rootfs),-(data)
partition=nand0,2
pogo_bootcmd=if fsload uboot-original-mtd0.kwb; then go 0x800200; fi
preboot=run if_netconsole start_netconsole
rescue_bootcmd=if test $rescue_installed -eq 1; then run rescue_set_bootargs; nand read.e 0x800000 0x100000 0x400000; bootm 0x800000; else run pogo_bootcmd; fi
rescue_installed=0
rescue_set_bootargs=setenv bootargs console=$console ubi.mtd=2 root=ubi0:rootfs ro rootfstype=ubifs $mtdparts $rescue_custom_params
start_netconsole=setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;
stderr=nc
stdin=nc
stdout=nc
ubifs_bootcmd=run ubifs_set_bootargs; if ubi part data && ubifsmount rootfs && ubifsload 0x800000 /boot/uImage && ubifsload 0x1100000 /boot/uInitrd; then bootm 0x800000 0x1100000; fi
ubifs_mtd=3
ubifs_set_bootargs=setenv bootargs console=$console ubi.mtd=$ubifs_mtd root=ubi0:rootfs rootfstype=ubifs $mtdparts $ubifs_custom_params
usb_bootcmd=run usb_init; run usb_set_bootargs; run usb_boot
usb_device=0:1
usb_root=/dev/sda1
usb_rootdelay=10
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 $usb 0x800000 /boot/uImage 1; then usb_scan_done=1; echo "Found bootable drive on usb $usb"; setenv usb_device $usb; setenv usb_root /dev/$dev; fi; done
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_set_bootargs=setenv bootargs console=$console root=$usb_root rootdelay=$usb_rootdelay rootfstype=$usb_rootfstype $mtdparts $usb_custom_params
ipaddr=192.168.1.2
usb_scan_1=usb=0:1 dev=sda2
usb_init=run usb_scan
usb_scan_list=1
usb_rootfstype=ext2
usb_boot=mw 0x800000 0 1; ext2load usb $usb_device 0x800000 /boot/uImage; if ext2load usb $usb_device 0x2100000 /boot/uInitrd; then bootm 0x800000 0x2100000; else bootm 0x800000; fi
serverip=192.168.1.7
Pogoplug:~$
Pogoplug:~$ reboot;exit
Connection to 192.168.1.2 closed by remote host.
Connection to 192.168.1.2 closed.

root@linux ~ # nc -l -u -p 6666
0
(Re)start USB...
USB: Register 10011 NbrPorts 1
USB EHCI 1.00
scanning bus for devices... 3 USB Device(s) found
scanning bus for storage devices... 1 Storage Device(s) found
Loading file "/rescueme" from usb device 0:1 (usbda1)
** File not found /rescueme
reading /rescueme.txt

** Unable to read "/rescueme.txt" from usb 0:1 **
Creating 1 MTD partitions on "nand0":
0x000002500000-0x000008000000 : "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: fixable bit-flip detected at PEB 134
UBI: fixable bit-flip detected at PEB 527
UBI: fixable bit-flip detected at PEB 569
UBI: fixable bit-flip detected at PEB 610
UBI: attached mtd1 to ubi0
UBI: MTD device name: "mtd=3"
UBI: MTD device size: 91 MiB
UBI: number of good PEBs: 728
UBI: number of bad PEBs: 0
UBI: max. allowed volumes: 128
UBI: wear-leveling threshold: 4096
UBI: number of internal volumes: 1
UBI: number of user volumes: 0
UBI: available PEBs: 717
UBI: total number of reserved PEBs: 11
UBI: number of PEBs reserved for bad PEB handling: 7
UBI: max/mean erase counter: 1/1
UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19
Error reading superblock on volume 'ubi:rootfs'!
Loading file "/boot/uImage" from usb device 0:1 (usbda1)
1 bytes read
Found bootable drive on usb 0:1
Loading file "/boot/uImage" from usb device 0:1 (usbda1)
6234266 bytes read
Loading file "/boot/uInitrd" from usb device 0:1 (usbda1)
5791271 bytes read
## Booting kernel from Legacy Image at 00800000 ...
Image Name: Linux-6.5.7-kirkwood-tld-1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 6234202 Bytes = 5.9 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02100000 ...
Image Name: initramfs-6.5.7-kirkwood-tld-1
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 5791207 Bytes = 5.5 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Using machid 0xdd6 from environment

Starting kernel ...
Re: Pogoplug e02
February 17, 2025 09:37PM
Teldo,

> I dont have
> serial, i used netconsole.

With netconsole you will not see anything after

> Starting kernel ...

So look for a new dynamic IP in your network. Use Linux nmap, IOS Fing, or log into your router.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 17, 2025 09:45PM
yeah does not get address, people reported similar problem on archlinuxarm forum.
What puzzled me old archlinux will not boot either as I am sure booted in past.
I will try get serial or courage to install newer uboot
Re: Pogoplug e02
February 17, 2025 10:18PM
> I will try get serial or courage to install
> newer uboot

Everything is easy when you have serial console. This box has a factory installed serial header so no soldering needed.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 20, 2025 07:30PM
Got serial.
Boot crashes with message:
VFS: Cannot open root device "/dev/sda1" or unknown-block(8,1): error -19

Archlinux 4.4 boots fine with same environment



Edited 1 time(s). Last edit at 02/20/2025 07:31PM by Teldo.
Re: Pogoplug e02
February 20, 2025 09:47PM
Teldo,

> Got serial.
> Boot crashes with message:
> VFS: Cannot open root device "/dev/sda1" or
> unknown-block(8,1): error -19

Power up, interrupt u-boot count down,

printenv
boot
And post the entire serial console boot log here.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 21, 2025 01:22AM
It is same env i already posted.
I changed only usb_scan-1 to sda1
Re: Pogoplug e02
February 21, 2025 02:31AM
Follow the instruction here and boot with serial console, USB rootfs:

https://forum.doozan.com/read.php?2,102054,105374#msg-105374

Don't save the envs until you have booted successfully a few times, and want to keep booting Debian rootfs. For Arch LInux, the envs settings is a bit different.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Pogoplug e02
February 23, 2025 01:44PM
I have bad serial, it loses connection frequently.
Ended using fw_setenv under original Pogo OS.
Pogo OS and alarm wont boot now but your debian on ext3 formatted stick works!
Tried ext2 but did not work, says fsck.ext2 missing.
Besides found bad block in dmesg so probably will not attempt newer uboot and will close the case :)
Is it better to use swap in partition, not file?
Thank you for all the help!
Re: Pogoplug e02
February 23, 2025 10:07PM
> Is it better to use swap in partition, not file?

Swap file is better. It's more flexible.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
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: