Recommended Posts

I bought a used Samsung Series 3 Chromebook (AKA the 2012 Samsung ARM Chromebook) about 3 weeks ago and have spent the majority of my free time since then trying to replace Chrome OS with Debian on the internal SSD. Although there is already a guide on the Debian wiki for almost this exact purpose, it makes use of binary blobs from Chrome OS and does not discuss replacing Chrome OS, only installing Debian on an SD card. That method works - and I used it verbatim to bootstrap my installation on the internal SSD - but as the author of the page admits it relies on unpackaged software with no source code available, which will potentially make the system difficult to maintain. Therefore I created a repository and packaged all of the required software not already in the Debian archive from upstream sources. I also wrote a few utilities of my own, which I also packaged and pushed to my repository, to fill in gaps in functionality not already covered by existing software. The result is a full installation of Debian Jessie (armhf) with the XFCE desktop environment and entirely packaged free software supporting it (with the exception of the proprietary Mali GLES library required for hardware graphics acceleration, which is packaged but obviously not DFSG free).

Anyone else who has this hardware is welcome to make use of my rough installation guide below. If you find any bugs in my packages, have suggestions for improvements, or would like me to clarify something, please let me know in this thread. Although I can't promise that I will maintain this repository indefinitely, I always archive copies of software I write and package. Therefore if my repository is down or no longer contains some of the software referenced in this guide, feel free to PM me and I will try to offer a resolution.
 
 
 

Without further ado, I present a rough guide for:
Replacing Chrome OS with Debian Jessie on the Samsung Series 3 Chromebook
The Right Way
 
 

1. Follow the "InstallingDebianOn Samsung ARMChromebook" guide on the Debian wiki to install Jessie on an SD card or flash drive. This external image will in turn be used to install Jessie on the Chromebook's internal SSD.
 
 

2. Boot from the Debian installation you just created (Ctrl+U), and bootstrap the installation on the SSD.

 
2.1. Format ROOT-A (/dev/mmcblk0p3) as EXT4.

mkfs.ext4 /dev/mmcblk0p3

 
 
2.2. Format STATE (/dev/mmcblk0p1) as SWAP.

mkswap /dev/mmcblk0p1

 
 
2.3. Use gdisk to shrink STATE to 2147 MB (Start: 13.6 GB; End: 15.7 GB). The necessary procedure is explained in this tutorial.

 
2.4. Use gdisk to expand ROOT-A to 11.3 GB (Start: 2292 MB; End: 13.6 GB).

gdisk /dev/mmcblk0

# Delete the partition and create it again with the desired size.
# You are required to know how to do this in gdisk.
# If you do not, read the tutorial linked in the previous step.

resize2fs /dev/mmcblk0p3

 
2.5. Use cgpt to mirror the Chrome OS priorities for the partitions.

cgpt show /dev/mmcblk0
cgpt add -i 2 -S 1 -T 15 -P 15 /dev/mmcblk0
cgpt add -i 4 -S 1 -T 15 -P 0 /dev/mmcblk0
cgpt add -i 6 -S 1 -T 15 -P 0 /dev/mmcblk0
cgpt add -i 1 -t data -l "STATE" /dev/mmcblk0
cgpt add -i 2 -t kernel -l "KERN-A" /dev/mmcblk0
cgpt add -i 3 -t rootfs -l "ROOT-A" /dev/mmcblk0
sync

 
2.6. Install Debian Jessie on ROOT-A.

mkdir /mnt/rar
mount /dev/mmcblk0p3 /mnt/rar -o rw,discard

debootstrap --arch=armhf jessie /mnt/rar http://ftp.us.debian.org/debian
  
nano /mnt/rar/etc/fstab
    # /etc/fstab: static file system information.
    #
    # Use 'blkid' to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/mmcblk0p3 during installation
echo "UUID=$(blkid | grep mmcblk0p3 | grep -Eo '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}') /               ext4    errors=remount-ro,noatime,nodiratime,discard  0       1" >> /mnt/rar/etc/fstab
echo '# swap was on /dev/mmcblk0p1 during installation' >> /mnt/rar/etc/fstab
echo "UUID=$(blkid | grep mmcblk0p1 | grep -Eo '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}') none            swap    sw                            0       0" >> /mnt/rar/etc/fstab

echo 'MY_HOSTNAME' > /mnt/rar/etc/hostname
  
nano /mnt/rar/etc/apt/sources.list
    ## JESSIE
    deb http://ftp.us.debian.org/debian/ jessie main contrib non-free
    deb-src http://ftp.us.debian.org/debian/ jessie main contrib non-free
    
    ## JESSIE-SECURITY
    deb http://security.debian.org/ jessie/updates main contrib non-free
    deb-src http://security.debian.org/ jessie/updates main contrib non-free
  
chroot /mnt/rar
apt-get update
apt-get install apt-transport-https console-setup bash-completion
wget -q https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/keys/xorangekiller.asc'>https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/keys/xorangekiller.asc -O- | apt-key add -
passwd root
exit
  
nano /mnt/rar/etc/apt/sources.list.d/killer.list
    deb https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/ unstable main contrib non-free
    deb-src https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/ unstable main contrib non-free
  
mount -o bind /proc /mnt/rar/proc
mount -o bind /dev /mnt/rar/dev
mount -o bind /dev/pts /mnt/rar/dev/pts
chroot /mnt/rar
apt-get update
apt-get install linux-image-exynos5 linux-headers-exynos5 firmware-linux firmware-libertas
apt-get install systemd chromebook-kernel-vboot parted
nano /etc/default/chromebook-vboot
    LINUX_CMDLINE = "lsm.module_locking=0 quiet init=/lib/systemd/systemd"
update-chromebook-vboot
  
apt-get install lightdm task-xfce-desktop
apt-get install libegl1-mali xserver-xorg-video-armsoc xserver-xorg-input-multitouch xserver-xorg-input-mouse
adduser bob
apt-get install sudo
usermod -a -G sudo,users bob
exit
umount /mnt/rar/dev/pts
umount /mnt/rar/dev
umount /mnt/rar/proc
  
mkdir /mnt/rar/etc/X11/xorg.conf.d
nano /mnt/rar/etc/X11/xorg.conf.d/51-multitouch.conf
    Section "InputClass"
        Identifier          "touchpad"
        MatchIsTouchpad     "on"
        Option              "FingerHigh"            "5"
        Option              "FingerLow"             "5"
        Option              "TapButton1"            "1"
        Option              "TapButton2"            "2"
        Option              "TapButton3"            "3"
        Option              "VertEdgeScroll"        "off"
        Option              "VertTwoFingerScroll"   "on"
        Option              "HorizEdgeScroll"       "off"
        Option              "HorizTwoFingerScroll"  "on"
        Option              "CircularScrolling"     "off"
        Option              "CircScrollTrigger"     "2"
        Option              "CoastingSpeed"         "0"
    EndSection
nano /mnt/rar/etc/X11/xorg.conf.d/30-exynos.conf
    Section "Device"
        Identifier      "Mali FBDEV"
        Driver          "armsoc"
        Option          "fbdev"                 "/dev/fb0"
        Option          "Fimg2DExa"             "false"
        Option          "DRI2"                  "true"
        Option          "DRI2_PAGE_FLIP"        "false"
        Option          "DRI2_WAIT_VSYNC"       "true"
    #   Option          "Fimg2DExaSolid"        "false"
    #   Option          "Fimg2DExaCopy"         "false"
    #   Option          "Fimg2DExaComposite"    "false"
        Option          "SWcursorLCD"           "false"
    EndSection
    
    Section "Screen"
        Identifier      "DefaultScreen"
        Device          "Mali FBDEV"
        DefaultDepth    24
    EndSection
  
mkdir /mnt/rar/home/bob/.scripts/
nano /mnt/rar/home/bob/.scripts/chromebook-local-keymap
    #!/bin/sh
    
    xmodmap -e 'keycode 22 = BackSpace Delete BackSpace Delete BackSpace BackSpace'
    xmodmap -e 'keycode 67 = XF86Back F1 XF86Back F1 F1 F1 XF86Switch_VT_1'
    xmodmap -e 'keycode 68 = XF86Forward F2 XF86Forward F2 F2 F2 XF86Switch_VT_2'
    xmodmap -e 'keycode 69 = XF86Refresh F3 XF86Refresh F3 F3 F3 XF86Switch_VT_3'
    xmodmap -e 'keycode 70 = XF86Battery F4 XF86Battery F4 F4 F4 XF86Switch_VT_4'
    xmodmap -e 'keycode 71 = XF86Display F5 XF86Display F5 F5 F5 XF86Switch_VT_5'
    xmodmap -e 'keycode 72 = XF86MonBrightnessDown F6 XF86MonBrightnessDown F6 F6 F6 XF86Switch_VT_6'
    xmodmap -e 'keycode 73 = XF86MonBrightnessUp F7 XF86MonBrightnessUp F7 F7 F7 XF86Switch_VT_7'
    xmodmap -e 'keycode 74 = XF86AudioMute F8 XF86AudioMute F8 F8 F8 XF86Switch_VT_8'
    xmodmap -e 'keycode 75 = XF86AudioLowerVolume F9 XF86AudioLowerVolume F9 F9 F9 XF86Switch_VT_9'
    xmodmap -e 'keycode 76 = XF86AudioRaiseVolume F10 XF86AudioRaiseVolume F10 F10 F10 XF86Switch_VT_10'
  
chroot /mnt/rar
chown -R bob:bob /home/bob/.scripts
chmod -R 755 /home/bob/.scripts
apt-get install alsa-utils pulseaudio-utils libasound2-data
apt-get install chromebook-brightness-control
visudo
    # Allow all users to set the screen brightness without a password
    %users  ALL=(ALL) NOPASSWD: /usr/bin/chromebook-brightness-control
exit
  
nano /mnt/rar/etc/pulse/default.pa
    ### Load audio drivers statically
    ### (it's probably better to not load these drivers manually, but instead
    ### use module-udev-detect -- see below -- for doing this automatically)
    load-module module-alsa-sink device=sysdefault
  
umount /mnt/rar
reboot

3. Boot from the Debian installation on the internal SSD (Ctrl+D), and setup the Chromebook keymap and shortcuts.

 
3.1. Go to "Applications Menu->Settings->Session and Startup->Application Autostart".
 
3.1.1. Add the Chromebook local keymap script to the login processes for the current user (bob).
Click "Add".
Name: Chromebook Local Keymap
Description: Set the proper keymap for the Samsung Series 3 Chromebook keyboard for the current user
Command: /home/bob/.scripts/chromebook-local-keymap
 

3.2. Run the Chromebook local keymap script you just added as a login process.




~/.scripts/chromebook-local-keymap

3.3. Go to "Applications Menu->Settings->Keyboard->Application Shortcuts".
 
3.3.1. Add the shortcut to turn the screen brightness down.
Click "Add".
Command: /usr/bin/sudo /usr/bin/chromebook-brightness-control --down --increment=200
Click "OK".
Shortcut: XF86MonBrightnessDown
Click "OK".

3.3.2. Add the shortcut to turn the screen brightness up.
Click "Add".
Command: /usr/bin/sudo /usr/bin/chromebook-brightness-control --up --increment=200
Click "OK"
Shortcut: XF86MonBrightnessUp
Click "OK"

  • Like 2
  • 1 month later...
  • 2 weeks later...

a there are some missing links but most important is the debian link https://wiki.debian.org/InstallingDebianOn/Samsung/ARMChromebook gives an error on jessie..

 

Nonethe less, Im willing to try this using my current arch build but Im a bit confused on your partition for mmcblk0, are all the partitions 1-6? Because I, staring at 12 on mine..

a there are some missing links but most important is the debian link https://wiki.debian.org/InstallingDebianOn/Samsung/ARMChromebook gives an error on jessie..

 

How so? I clicked every link in my guide a few minutes ago, and they are all still active. Although the guide on the Debian wiki has been updated slightly since I posted this tutorial, it still looks intact. I admit that I didn't follow the guide exactly the first time I used it (mostly because I installed Jessie on a flash drive instead of an SD card), but my deviation was slight. I have no reason to believe it doesn't work as-is.

 

Nonethe less, Im willing to try this using my current arch build but Im a bit confused on your partition for mmcblk0, are all the partitions 1-6? Because I, staring at 12 on mine..

You are correct. There are twelve partitions. However, it is not necessary to use all of them for this procedure to work. On the contrary, I would prefer to start with a clean partition table and create only the partitions we absolutely need (which is technically four - firmware, kernel, boot, and root). However the Chromebook's firmware assumes the factory partition layout on the internal disk, and it would be far more effort than it's worth to install modified firmware to change that assumption, in my opinion. Therefore my guide instructs you to repurpose the existing partitions and set the appropriate flags to notify the firmware of the nominal changes (from its perspective).

You're guidelines seems SO interesting that I'm ready to replace ChromeOS with debian. However, the link for the tutorial on gdisk seems to be broken. I've never used gdisk and I'm a little afraid of messing things up on the chromebook's ssd. From what I've read on the web, it seems that I have to delete the partition and create it again. Could you be so kind and explain that procedure a little further?

 

 

TIA,

 

Ignacio

You're guidelines seems SO interesting that I'm ready to replace ChromeOS with debian. However, the link for the tutorial on gdisk seems to be broken. I've never used gdisk and I'm a little afraid of messing things up on the chromebook's ssd. From what I've read on the web, it seems that I have to delete the partition and create it again. Could you be so kind and explain that procedure a little further?

 

I fixed the broken link you pointed out, but after taking another look at the tutorial, I decided it would probably be a good idea for me to elaborate anyway. After all, partition and filesystem manipulation can be a little scary, even for those of us with more experience, so it doesn't hurt to be thorough. My instructions below correspond roughly to sections 2.1-2.5 in my opening post. I included a few extra commands which don't modify the procedure in any way, but should give you a better understanding of what is actually happening. Also note that I generated the output you see below in a virtual machine (in the interest of not reformatting my Chromebook again just for the purposes of this tutorial) using a virtual hard disk imaged with the Chrome OS recovery image for my Chromebook. Therefore while the partition table should be reasonably similar to one on an actual Chromebook, don't take it as canonical.

 

Without further ado, every command I entered to modify the partition table and filesystem (in order), along with their unabridged output, is below.

root@T1008:~# gdisk -l /dev/mmcblk0
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 135130 sectors (66.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1         2826240        33554398   14.7 GiB    0700  STATE
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720         2826239   1.2 GiB     7F01  ROOT-A
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM
root@T1008:~# cgpt show /dev/mmcblk0
       start        size    part  contents
           0           1          PMBR (Boot GUID: 5F80E349-F725-6147-91AD-6C44106C5813)
           1           1          Pri GPT header
           2          32          Pri GPT table
     2826240    30728159       1  Label: "STATE"
                                  Type: Linux data
                                  UUID: A415F487-AA07-4FFF-8A85-6A0A809583EC
       20480       32768       2  Label: "KERN-A"
                                  Type: ChromeOS kernel
                                  UUID: 213142CC-4F72-B843-9DDB-B1C5524BF811
                                  Attr: priority=15 tries=15 successful=1
      286720     2539520       3  Label: "ROOT-A"
                                  Type: ChromeOS rootfs
                                  UUID: C860A2E2-176B-CF40-8053-37C409873F5C
       53248       32768       4  Label: "KERN-B"
                                  Type: ChromeOS kernel
                                  UUID: DB75DACA-EA06-8348-90D3-2457C29E4451
                                  Attr: priority=0 tries=15 successful=0
      282624        4096       5  Label: "ROOT-B"
                                  Type: ChromeOS rootfs
                                  UUID: 15131009-C114-4840-B53C-FEE30EC3A3F1
       16448           1       6  Label: "KERN-C"
                                  Type: ChromeOS kernel
                                  UUID: 33493AE9-55AD-E543-8BAE-C9806B72816B
                                  Attr: priority=0 tries=15 successful=0
       16449           1       7  Label: "ROOT-C"
                                  Type: ChromeOS rootfs
                                  UUID: 484ED029-82FA-5F45-B63B-79DCC131F45F
       86016       32768       8  Label: "OEM"
                                  Type: Linux data
                                  UUID: 64DC98D4-174B-5C4A-B14F-B89A67343F40
       16450           1       9  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: 0626AB85-4D5D-E144-B606-17DE20F37F56
       16451           1      10  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: ABB37F2E-18F9-A042-85EE-143EE853922A
          64       16384      11  Label: "RWFW"
                                  Type: ChromeOS firmware
                                  UUID: FBC363CF-8486-7445-807B-7BB62EB5ACB8
      249856       32768      12  Label: "EFI-SYSTEM"
                                  Type: EFI System Partition
                                  UUID: 5F80E349-F725-6147-91AD-6C44106C5813
    33554399          32          Sec GPT table
    33554431           1          Sec GPT header
root@T1008:~# mkfs.ext4 /dev/mmcblk0p3
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
79360 inodes, 317440 blocks
15872 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=327155712
10 block groups
32768 blocks per group, 32768 fragments per group
7936 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done 

root@T1008:~# mkswap /dev/mmcblk0p1
Setting up swapspace version 1, size = 15364072 KiB
no label, UUID=f499dafe-02ab-4c5b-8729-c17026887730
root@T1008:~# gdisk /dev/mmcblk0
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 135130 sectors (66.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1         2826240        33554398   14.7 GiB    0700  STATE
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720         2826239   1.2 GiB     7F01  ROOT-A
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM

Command (? for help): ?
b	back up GPT data to a file
c	change a partition's name
d	delete a partition
i	show detailed information on a partition
l	list known partition types
n	add a new partition
o	create a new empty GUID partition table (GPT)
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

Command (? for help): d
Partition number (1-12): 1

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-33554398, default = 2826240) or {+-}size{KMGTP}: -2147M
Last sector (29157342-33554398, default = 33554398) or {+-}size{KMGTP}: -0K
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700
Changed type of partition to 'Microsoft basic data'

Command (? for help): p
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 26466232 sectors (12.6 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1        29157342        33554398   2.1 GiB     0700  Microsoft basic data
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720         2826239   1.2 GiB     7F01  ROOT-A
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM

Command (? for help): c
Partition number (1-12): 1
Enter name: STATE

Command (? for help): p
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 26466232 sectors (12.6 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1        29157342        33554398   2.1 GiB     0700  STATE
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720         2826239   1.2 GiB     7F01  ROOT-A
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/mmcblk0.
The operation has completed successfully.
root@T1008:~# mkswap /dev/mmcblk0p1
Setting up swapspace version 1, size = 2198524 KiB
no label, UUID=2ddb62d2-3d33-4e69-82cf-ef404114b851
root@T1008:~# gdisk /dev/mmcblk0
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 26466232 sectors (12.6 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1        29157342        33554398   2.1 GiB     0700  STATE
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720         2826239   1.2 GiB     7F01  ROOT-A
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM

Command (? for help): ?
b	back up GPT data to a file
c	change a partition's name
d	delete a partition
i	show detailed information on a partition
l	list known partition types
n	add a new partition
o	create a new empty GUID partition table (GPT)
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

Command (? for help): d 
Partition number (1-12): 3

Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-29157341, default = 286720) or {+-}size{KMGTP}: 286720
Last sector (286720-29157341, default = 29157341) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 7F01
Changed type of partition to 'ChromeOS root'

Command (? for help): p
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 135130 sectors (66.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1        29157342        33554398   2.1 GiB     0700  STATE
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720        29157341   13.8 GiB    7F01  ChromeOS root
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM

Command (? for help): c
Partition number (1-12): 3
Enter name: ROOT-A

Command (? for help): p
Disk /dev/mmcblk0: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C324F110-1D86-F348-8EF8-38F81DD82AA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 1-sector boundaries
Total free space is 135130 sectors (66.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1        29157342        33554398   2.1 GiB     0700  STATE
   2           20480           53247   16.0 MiB    7F00  KERN-A
   3          286720        29157341   13.8 GiB    7F01  ROOT-A
   4           53248           86015   16.0 MiB    7F00  KERN-B
   5          282624          286719   2.0 MiB     7F01  ROOT-B
   6           16448           16448   512 bytes   7F00  KERN-C
   7           16449           16449   512 bytes   7F01  ROOT-C
   8           86016          118783   16.0 MiB    0700  OEM
   9           16450           16450   512 bytes   7F02  reserved
  10           16451           16451   512 bytes   7F02  reserved
  11              64           16447   8.0 MiB     FFFF  RWFW
  12          249856          282623   16.0 MiB    EF00  EFI-SYSTEM

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/mmcblk0.
The operation has completed successfully.
root@T1008:~# resize2fs /dev/mmcblk0p3
resize2fs 1.42.8 (20-Jun-2013)
Resizing the filesystem on /dev/sdb3 to 3608827 (4k) blocks.
The filesystem on /dev/mmcblk0p3 is now 3608827 blocks long.

root@T1008:~# cgpt show /dev/mmcblk0
       start        size    part  contents
           0           1          PMBR (Boot GUID: 5F80E349-F725-6147-91AD-6C44106C5813)
           1           1          Pri GPT header
           2          32          Pri GPT table
    29157342     4397057       1  Label: "STATE"
                                  Type: Linux data
                                  UUID: 6A31DAE2-6E04-4B51-9F14-A7BFC47A8C2D
       20480       32768       2  Label: "KERN-A"
                                  Type: ChromeOS kernel
                                  UUID: 213142CC-4F72-B843-9DDB-B1C5524BF811
                                  Attr: priority=15 tries=15 successful=1
      286720    28870622       3  Label: "ROOT-A"
                                  Type: ChromeOS rootfs
                                  UUID: 823F1CCE-F8EA-47BB-B7D1-63E254DF673F
       53248       32768       4  Label: "KERN-B"
                                  Type: ChromeOS kernel
                                  UUID: DB75DACA-EA06-8348-90D3-2457C29E4451
                                  Attr: priority=0 tries=15 successful=0
      282624        4096       5  Label: "ROOT-B"
                                  Type: ChromeOS rootfs
                                  UUID: 15131009-C114-4840-B53C-FEE30EC3A3F1
       16448           1       6  Label: "KERN-C"
                                  Type: ChromeOS kernel
                                  UUID: 33493AE9-55AD-E543-8BAE-C9806B72816B
                                  Attr: priority=0 tries=15 successful=0
       16449           1       7  Label: "ROOT-C"
                                  Type: ChromeOS rootfs
                                  UUID: 484ED029-82FA-5F45-B63B-79DCC131F45F
       86016       32768       8  Label: "OEM"
                                  Type: Linux data
                                  UUID: 64DC98D4-174B-5C4A-B14F-B89A67343F40
       16450           1       9  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: 0626AB85-4D5D-E144-B606-17DE20F37F56
       16451           1      10  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: ABB37F2E-18F9-A042-85EE-143EE853922A
          64       16384      11  Label: "RWFW"
                                  Type: ChromeOS firmware
                                  UUID: FBC363CF-8486-7445-807B-7BB62EB5ACB8
      249856       32768      12  Label: "EFI-SYSTEM"
                                  Type: EFI System Partition
                                  UUID: 5F80E349-F725-6147-91AD-6C44106C5813
    33554399          32          Sec GPT table
    33554431           1          Sec GPT header
root@T1008:~# cgpt add -i 2 -S 1 -T 15 -P 15 /dev/mmcblk0
root@T1008:~# cgpt add -i 4 -S 1 -T 15 -P 0 /dev/mmcblk0
root@T1008:~# cgpt add -i 6 -S 1 -T 15 -P 0 /dev/mmcblk0
root@T1008:~# cgpt add -i 1 -t data -l "STATE" /dev/mmcblk0
root@T1008:~# cgpt add -i 2 -t kernel -l "KERN-A" /dev/mmcblk0
root@T1008:~# cgpt add -i 3 -t rootfs -l "ROOT-A" /dev/mmcblk0
root@T1008:~# sync
root@T1008:~# cgpt show /dev/mmcblk0
       start        size    part  contents
           0           1          PMBR (Boot GUID: 5F80E349-F725-6147-91AD-6C44106C5813)
           1           1          Pri GPT header
           2          32          Pri GPT table
    29157342     4397057       1  Label: "STATE"
                                  Type: Linux data
                                  UUID: 6A31DAE2-6E04-4B51-9F14-A7BFC47A8C2D
       20480       32768       2  Label: "KERN-A"
                                  Type: ChromeOS kernel
                                  UUID: 213142CC-4F72-B843-9DDB-B1C5524BF811
                                  Attr: priority=15 tries=15 successful=1
      286720    28870622       3  Label: "ROOT-A"
                                  Type: ChromeOS rootfs
                                  UUID: 823F1CCE-F8EA-47BB-B7D1-63E254DF673F
       53248       32768       4  Label: "KERN-B"
                                  Type: ChromeOS kernel
                                  UUID: DB75DACA-EA06-8348-90D3-2457C29E4451
                                  Attr: priority=0 tries=15 successful=1
      282624        4096       5  Label: "ROOT-B"
                                  Type: ChromeOS rootfs
                                  UUID: 15131009-C114-4840-B53C-FEE30EC3A3F1
       16448           1       6  Label: "KERN-C"
                                  Type: ChromeOS kernel
                                  UUID: 33493AE9-55AD-E543-8BAE-C9806B72816B
                                  Attr: priority=0 tries=15 successful=1
       16449           1       7  Label: "ROOT-C"
                                  Type: ChromeOS rootfs
                                  UUID: 484ED029-82FA-5F45-B63B-79DCC131F45F
       86016       32768       8  Label: "OEM"
                                  Type: Linux data
                                  UUID: 64DC98D4-174B-5C4A-B14F-B89A67343F40
       16450           1       9  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: 0626AB85-4D5D-E144-B606-17DE20F37F56
       16451           1      10  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: ABB37F2E-18F9-A042-85EE-143EE853922A
          64       16384      11  Label: "RWFW"
                                  Type: ChromeOS firmware
                                  UUID: FBC363CF-8486-7445-807B-7BB62EB5ACB8
      249856       32768      12  Label: "EFI-SYSTEM"
                                  Type: EFI System Partition
                                  UUID: 5F80E349-F725-6147-91AD-6C44106C5813
    33554399          32          Sec GPT table
    33554431           1          Sec GPT header

Thanks so much for your response. I'm going to try it tomorrow after work. If you don't mind, let me ask you about Flash: I've read many posts on how to make it work with Chromium and PepperFlash from ChromeOS. Have you had the chance to try it?

 

TIA,

 

Ignacio

I do not use Flash anymore, even on i386 and AMD64. Therefore I have not tested it on my Chromebook under Debian. However from what I understand, you should be able to launch Chromium with the Pepper Flash Player plugin, like you suggest, without too much effort. You will need a copy of /opt/google/chrome/pepper/libpepflashplayer.so and /opt/google/chrome/pepper/pepper-flash.info from your original Chrome OS installation to make this work. If you don't have that installation anymore (presumably because you replaced it with Debian), you can also extract the files you need from the recovery image. A demonstration of the latter is below.

$ sudo kpartx -av chromeos_4319.96.0_daisy_recovery_stable-channel_mp-v3.bin 
add map loop0p1 (254:0): 0 4096 linear /dev/loop0 2826240
add map loop0p2 (254:1): 0 32768 linear /dev/loop0 20480
add map loop0p3 (254:2): 0 2539520 linear /dev/loop0 286720
add map loop0p4 (254:3): 0 32768 linear /dev/loop0 53248
add map loop0p5 (254:4): 0 4096 linear /dev/loop0 282624
add map loop0p6 (254:5): 0 1 linear /dev/loop0 16448
add map loop0p7 (254:6): 0 1 linear /dev/loop0 16449
add map loop0p8 (254:7): 0 32768 linear /dev/loop0 86016
add map loop0p9 (254:8): 0 1 linear /dev/loop0 16450
add map loop0p10 (254:9): 0 1 linear /dev/loop0 16451
add map loop0p11 (254:10): 0 16384 linear /dev/loop0 64
add map loop0p12 (254:11): 0 32768 linear /dev/loop0 249856
$ sudo cgpt show /dev/loop0
       start        size    part  contents
           0           1          PMBR (Boot GUID: 5F80E349-F725-6147-91AD-6C44106C5813)
           1           1          Pri GPT header
           2          32          Pri GPT table
     2826240        4096       1  Label: "STATE"
                                  Type: Linux data
                                  UUID: 76AFDED6-459A-9340-98A7-5AF8BCCB06CB
       20480       32768       2  Label: "KERN-A"
                                  Type: ChromeOS kernel
                                  UUID: 213142CC-4F72-B843-9DDB-B1C5524BF811
                                  Attr: priority=15 tries=15 successful=1
      286720     2539520       3  Label: "ROOT-A"
                                  Type: ChromeOS rootfs
                                  UUID: C860A2E2-176B-CF40-8053-37C409873F5C
       53248       32768       4  Label: "KERN-B"
                                  Type: ChromeOS kernel
                                  UUID: DB75DACA-EA06-8348-90D3-2457C29E4451
                                  Attr: priority=0 tries=15 successful=0
      282624        4096       5  Label: "ROOT-B"
                                  Type: ChromeOS rootfs
                                  UUID: 15131009-C114-4840-B53C-FEE30EC3A3F1
       16448           1       6  Label: "KERN-C"
                                  Type: ChromeOS kernel
                                  UUID: 33493AE9-55AD-E543-8BAE-C9806B72816B
                                  Attr: priority=0 tries=15 successful=0
       16449           1       7  Label: "ROOT-C"
                                  Type: ChromeOS rootfs
                                  UUID: 484ED029-82FA-5F45-B63B-79DCC131F45F
       86016       32768       8  Label: "OEM"
                                  Type: Linux data
                                  UUID: 64DC98D4-174B-5C4A-B14F-B89A67343F40
       16450           1       9  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: 0626AB85-4D5D-E144-B606-17DE20F37F56
       16451           1      10  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: ABB37F2E-18F9-A042-85EE-143EE853922A
          64       16384      11  Label: "RWFW"
                                  Type: ChromeOS firmware
                                  UUID: FBC363CF-8486-7445-807B-7BB62EB5ACB8
      249856       32768      12  Label: "EFI-SYSTEM"
                                  Type: EFI System Partition
                                  UUID: 5F80E349-F725-6147-91AD-6C44106C5813
     2863007          32          Sec GPT table
     2863039           1          Sec GPT header
$ sudo mount -t ext2 -o ro /dev/mapper/loop0p3 /mnt
$ ls -l /mnt/opt/google/chrome/pepper/
total 13284
lrwxrwxrwx 1 root root       47 Sep 12 20:11 libgoogletalkremoting.so -> /opt/google/talkplugin/libgoogletalkremoting.so
-rwxr-xr-x 1 root root   198404 Sep 12 19:24 libnetflixhelper.so
-rwxr-xr-x 1 root root 13368352 Sep 12 19:24 libpepflashplayer.so
lrwxrwxrwx 1 root root       41 Sep 12 20:11 libppgoogletalk.so -> /opt/google/talkplugin/libppgoogletalk.so
lrwxrwxrwx 1 root root       34 Sep 12 20:11 libppo1d.so -> /opt/google/talkplugin/libppo1d.so
lrwxrwxrwx 1 root root       40 Sep 12 20:10 libppo3dautoplugin.so -> /opt/google/o3d/libppgtpo3dautoplugin.so
-rw-r--r-- 1 root root      417 Sep 12 19:24 netflixhelper.info
-rw-r--r-- 1 root root      444 Sep 12 19:24 pepper-flash.info
$ sudo mkdir -p /opt/google/chrome
$ sudo cp -a /mnt/opt/google/chrome/pepper /opt/google/chrome/
$ sudo umount /mnt
$ sudo kpartx -dv chromeos_4319.96.0_daisy_recovery_stable-channel_mp-v3.bin 
del devmap : loop0p12
del devmap : loop0p11
del devmap : loop0p10
del devmap : loop0p9
del devmap : loop0p8
del devmap : loop0p7
del devmap : loop0p6
del devmap : loop0p5
del devmap : loop0p4
del devmap : loop0p3
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0

If you manage to make Pepper Flash Player work in Chromium, I would be interested to see how you accomplished it. Please post your results below, pass or fail; they may guide someone else looking to accomplish the same thing.

Hi there. I'm right now in the middle of the installation but I'm presented with this error:

 

xserver-xorg-video-armsoc : Depende: xorg-video-abi-12 pero no es instalable

 

It looks like there's a dependency on one of your packages on a missing package in debian

 

Any sugggestions?

 

TIA,

 

Ignacio

First try installing was almost perfect. Besides the problem with the missing dependency mentioned in my previous post, I could install Debian. However, after booting up the computer I got a message in post saying that the ChromeOS was missing and I needed to reinstall it using my backup. I'm going to give it another try shortly.

 

Since my partition layout was different than yours I could not follow your instructions as you suggested. I could not recreate p3 as you instructed and I could not do a resizefs on p3. May that be the reason why the computer is complaining at boot-time?

 

TIA,

 

Ignacio

After restoring ChromeOS to its original state, I could follow your instructions and install it following your guidelines. I download installed from your repo the armsoc xorg driver using dpkg -i --force-depends, but I can't make X work. The log says:

 

module ABI major version (12) doesn't match the server's version (14)

 

Any help, please?

 

TIA,

 

Ignacio

After restoring ChromeOS to its original state, I could follow your instructions and install it following your guidelines. I download installed from your repo the armsoc xorg driver using dpkg -i --force-depends, but I can't make X work. The log says:

 

module ABI major version (12) doesn't match the server's version (14)

 

Any help, please?

 

TIA,

 

Ignacio

 

The X server in Jessie has been updated since I built that package. The Xorg ABI changes with every major release, so each driver built against it needs to be updated every time the Xorg core is updated to a major new version. I just updated xf86-video-armsoc (which builds the xserver-xorg-video-armsoc binary package) to the latest upstream version, patched it for the XServer 1.14 ABI, built new binaries, and uploaded it to my repository. You should be able to install the package now. Let me know if you run into any other such regressions.

I have applied your update, and it works now. Do you think it would be wise to put the xserver packages on hold to prevent updates unless there's and update on your driver? I believe there's a way to create binary dependencies in deb packages so, in this case, if they were declared in your driver, no updates to xserver would be applies until there's a new version of your driver. I haven't done that, but I could investigate it for you if you want.

 

Thanks so much for your great work.

 

Regards,

 

Ignacio

First thing I noticed after login is that there seems to be no HW accelerated graphics. Playing video is quite painful, I haven't even tried setting pepperflash. Are you running it under the same conditions?

 

Thanks,

 

Ignacio

I have applied your update, and it works now. Do you think it would be wise to put the xserver packages on hold to prevent updates unless there's and update on your driver? I believe there's a way to create binary dependencies in deb packages so, in this case, if they were declared in your driver, no updates to xserver would be applies until there's a new version of your driver. I haven't done that, but I could investigate it for you if you want.

 

Thanks so much for your great work.

 

Regards,

 

Ignacio

 

I do not recommend putting xserver-xorg-core on hold. Xorg 1.15 will not be released, not to mention packaged, until early next year, and X receives security updates often enough to make unequivocally sticking with an older version potentially dangerous. I will update xf86-video-armsoc again when new versions of X are released. Although I had to make some minor code changes which have not yet landed upstream in this case, next time it will likely be as simple as recompiling the driver against the new Xorg ABI. APT (apt-get, aptitude, or your other front-end of choice) will give you the option to either remove the broken driver or stay upgrading the X server until the conflict is resolved when Xorg 1.15 is eventually pushed to Jessie. Therefore you can avoid breaking X at that point by not upgrading it for a few days until I upload the new driver and the conflict is automatically resolved.

 

First thing I noticed after login is that there seems to be no HW accelerated graphics. Playing video is quite painful, I haven't even tried setting pepperflash. Are you running it under the same conditions?

 

Thanks,

 

Ignacio

 

Graphics are accelerated, but you only have partial 3D acceleration. Unfortunately there is no support for the Mali T604 in Mesa, and ARM's proprietary DRI library (at least the one that ships with the Chromebook) only partially supports 3D acceleration. Chrome OS works around this limitation by drawing everything in an OpenGL window using the completely functional OpenGLES acceleration. If you are interested in more details, read Ubuntu Bug #1085596.

Or just save yourself the hassle and get "Chrubuntu" :)

 

Although ChrUbuntu is an easy way to install Ubuntu natively on a Chromebook, it is not equivalent to my method. The principal difference is that ChrUbuntu is designed to install Ubuntu onto an external device (such as a flash drive or an SD card) so it can be dual-booted with Chrome OS, whereas my tutorial details how to install Debian (although it could just as easily be applied to Ubuntu) to the Chromebook's internal SSD, completely replacing Chrome OS. As far as I know, the tutorial I posted in the opening post is the only one of its kind. The method is not particularly easy, and could probably be automated similarly to ChrUbuntu. Therefore it is not intended for the casual user. Its primary advantage is that the OS will run much faster from the internal SSD than from a flash drive or SD card. However, like you noted, there are some serious downsides to consider.

I do not recommend putting xserver-xorg-core on hold. Xorg 1.15 will not be released, not to mention packaged, until early next year, and X receives security updates often enough to make unequivocally sticking with an older version potentially dangerous. I will update xf86-video-armsoc again when new versions of X are released. Although I had to make some minor code changes which have not yet landed upstream in this case, next time it will likely be as simple as recompiling the driver against the new Xorg ABI. APT (apt-get, aptitude, or your other front-end of choice) will give you the option to either remove the broken driver or stay upgrading the X server until the conflict is resolved when Xorg 1.15 is eventually pushed to Jessie. Therefore you can avoid breaking X at that point by not upgrading it for a few days until I upload the new driver and the conflict is automatically resolved.

 

 

Graphics are accelerated, but you only have partial 3D acceleration. Unfortunately there is no support for the Mali T604 in Mesa, and ARM's proprietary DRI library (at least the one that ships with the Chromebook) only partially supports 3D acceleration. Chrome OS works around this limitation by drawing everything in an OpenGL window using the completely functional OpenGLES acceleration. If you are interested in more details, read Ubuntu Bug #1085596.

 

 

Ok. Thanks so much for your assistance. Debian runs quite fine, and your guidelines are impressive. Although its performance is not superb, it is usable, and it is more flexible than running ChromeOS.

 

Thanks again,

 

Ignacio

  • 4 weeks later...

hi xorangekiller

 

i have a problem with a "wget -q https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/keys/xorangekiller.asc -o- | apt-key add -" line

 

i get "gpg: no valid OpenPGP data found" !!

 

The GPG key I use to sign my repository has not changed, nor has its location relative to the repository. However, I notice that the command you quoted is not the same as the one that appears in my tutorial. You replaced the uppercase "O" at the end of the wget command line with a lowercase "o". Since wget options are case-sensitive, as is true of most utilities, it is not surprising that the command you quoted does not work. You are told that there is no OpenPGP data to be found because that is exactly the case. Try the following command (which is the same as the one which appears in the tutorial in my opening post) instead.

# wget -q https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/keys/xorangekiller.asc -O- | apt-key add -

i've try gpg --import xorangekiller.asc and it seemed to work but I get errors during apt-get update

 

Although you successfully imported my public key into your GPG keyring using gpg --import, that is not relevant to APT. APT keeps its own keys in /etc/apt/trusted.gpg and /etc/apt/trusted.gpg.d. Therefore apt-get is not able to verify the signing key of my repository in your case because APT does not have my public key. If you wanted to isolate downloading the key and adding it to your APT keyring into separate commands, you could do so as follows:

$ wget https://dl.dropboxusercontent.com/u/62647756/repos/apt/debian/keys/xorangekiller.asc
# apt-key add xorangekiller.asc
$ rm xorangekiller.asc

It sounds like apt-key added the repo key to your APT keyring this time. The only thing it is supposed to print after a key has been successfully imported is "OK".

 

That said, I have absolutely no idea how to interpret you new problem. I will try to help you, but you need to be precise! Based on the resolution of your last issue, my advice is to double-check that you typed everything correctly. This is Linux. Case matters. Spacing matters. My guide has been tested numerous time. It is unlikely that it has any major flaws in its current incarnation. (Although software is revved, and I am only human; so I'm not so foolish as to claim my guide is absolutely bulletproof.)

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Sihoo Doro C300 Pro V2 Ergonomic Office Chair review: The Ikea of chairs by Steven Parker I've reviewed a few gaming chairs over the past three years or so and generally found them to score well in our reviews. SIHOO reached out asking if I was interested in taking a look at their flagship chair, the Doro C300 Pro V2. I never got the chance to check out its predecessor, but the V2 is described as an "Adaptive Ergonomic Chair." It became available to buy in April of this year. Let's get things rolling with a closer look at the specifications and features. Specifications Doro C300 Pro V2 Model Ergonomic Materials Mesh Back and Seat; Soft PU Coated Armrests Height adjustability 45.5 - 53 cm / 17.5" - 20.9" Seat (w+d) 52 x 43 - 47 cm / 20.5" x 16.9" - 18.5" (adjustable) Backrest 52 – 60 cm / 20.5" - 23.6" (adjustable) Lumbar support Mesh built-in (adjustable) Armrest adjustability 8D Bionic Armrests Rocking angle 105°, 120°, 135° (fixed) Neck support Mesh built-in (adjustable) Net weight 27.3 kg / 59.64 lbs Weight support 150 kg / 330 lbs Colors Black, White Warranty 5 years (upon registering) Price $499.99, $539.99 Introduction At first glance, it looks like a chair that in another life wants to be a Herman Miller; It certainly looks like my Aeron Remastered, but the Doro C300 Pro V2 has quite a few more features and costs quite a bit less. SIHOO says that it is made up of a "DynaCore" system that tracks your movement and synchronizes the headrest, backrest, lumbar support, and armrests as you shift, twist, or recline. They also say that the "SyncroFlex Backrest" molds to your spine, which kind of describes how the mesh fabric works in most ergonomic chairs, but anyway. Below are the meat and potatoes measurements for the chair. Here is the same tech sheet, but in inches. Durability I would be remiss to not talk about the various durability testing this chair underwent before coming to market, as this is claimed on the product page. First of all, the chair is BIFMA-, SGS-, and TÜV-certified. As for durability, the tests undergone were: 100,000 Castor cycles tested 120,000 Armrest cycles tested 120,000 Recline cycles tested 120,000 Gas lift cycles tested 60,000 Armrest durability cycles tested 120,000 Rotation cycles tested Nothing about weights testing, though. Now that's all disclosed, now onto my own personal findings. Assembly The Doro C300 Pro V2 came in two large boxes (1) (2), and everything was packed very well, protecting the different parts of the chair. In the box, there is a folded sheet that explains the 12 steps to assemble it; they are: Remove the bottom cover on the aluminum base; Insert the five legs into the aluminum base and use ten screws to fasten them; Insert the castors into the legs; Replace the bottom cover on the bottom of the aluminum base; Place the Class 4 Hydraulics gas cylinder into the aluminum base; Screw the bottom part of the arm rests, taking care of the orientation using two screws on each side; Use three torx screws to fasten the footrest to the bottom of the seat; Fasten the backrest to the seat using four torx bolts; Fasten the armrests to the backrest using four Torx bolts (two on each side), taking care to note the orientation; Place the chair onto the Class 4 Hydraulics gas cylinder; Insert the headrest into the top of the backrest; Use two torx screws to fasten the headrest to the backrest. There's also an online guide you can refer to. Carefully unpacking the two boxes took around 15 minutes because almost everything is wrapped in plastic and protective foam; the chair assembly itself took around an hour. I say in the above assembly steps to take note of the orientation, because it's not obvious which way around the bottom portion of the armrests go, and although there is an L and R on the bottom of the armrests, it also wasn't clear from the instructions which was actually left or right, facing the chair, or in the seated down orientation? Anyway, I ended up putting the bottom portions on the wrong sides, and after securing one of the armrests, I discovered that although it was on the correct side, the armrest base could rotate a full 360°, but not when bolted to the chair, so I had to remove it, rotate it, and then bolt it back on. Truly an Ikea experience! Also, to complicate things further, although all the parts are labeled from A to X (yes, that's 24 parts) unhelpfully, these letters do not appear on the parts themselves or the package with the bolts, screws, and washers. There's also a pair of protective gloves in the box, but I think they were made for much smaller hands than I have. Even my friend, who is 5.1, had difficulty putting them on. Once assembled, I needed to sit down. Anyway, as I said, it looks quite similar to my Herman Miller. And here is the back of it. If you look at the product page and on Amazon, it seems like a lot of thought has gone into the chair itself and what it's capable of, but there is no mention at all about the castors, and this is an area where I think the chair trips up quite quickly. I found it difficult to move the chair in any direction. I asked a friend who came to visit me earlier this week to test my findings, and she said that the wheels were "no good," so it definitely isn't just me. I am 6'2 myself and a big guy, I work from home and gained a few pounds from mostly staying in and the hell away from other people. However, the Doro C300 Pro V2 is rated for up to 150kg (330lbs), which in my case is used well within its max rating. Ergonomics The number of adjustments you can make, right up to setting it in nap mode — which I haven't fully tested yet — is what you'd expect from a premium chair. Yes, you can go up and down (max 7.5 cm adjustment), rock back and forth (with tilt adjustment), and lock the chair between three stages of 105°, 120°, 135°, which is not quite as flat as the AndaSeat I tested at 160°. Some thought has also gone into the "8D" armrests, too, which are cushioned but quite firm; you'll only know it if you press hard into the PU-covered tops, which give about half a centimeter, but it's enough to ensure your skin won't get awkwardly stuck to it in warmer (or sweatier) conditions. It almost feels like plastic and is very easy to keep clean. However, the armrest positions move far too easily, and I am not sure what that "elbow" function is. Maybe it is good for a short person with short arms, anyway, I never used it and kept it flat at all times. There are eight levels of adjustment for the armrests, they are: backwards, forwards, swing left/right, height up and down, tilt, and 360° rotation, which can be handy for desk clearance. As I said, the armrest pads shift far too easily, which could give off an ergonomic vibe, but who wants the armrest sliding when you are shifting weight? The height adjustability does lock into place when lifting and adjusting. Comfort This is ultimately what it boils down to at the end of the day, right? Quite a lot of reviews praise the comfort of this chair, and I don't disagree that the mesh seating is quite comfortable. I am used to the material from my daily Herman Miller. However, the backrest cannot be locked into place, and this is actually a feature; as you shift or recline yourself on the chair, the backrest moves with your body. It took some getting used to. The lumbar gives ample support, but I would have preferred an adjustable one built into the seat base, as this causes the backrest to move up and down at will. Again, as with my previous chair review, this chair is also rated for tall people, but nowhere in the product documentation does it say how tall. Being 6'2 myself, I'm happy to say that the backrest is tall and wide enough, and thought has been given to being able to adjust the neck rest, but as others have mentioned in their reviews, people as tall as 6.2ft is about the limit for the neckrest. Conclusion What I didn't like The footrest is rated for 15kg (33 lbs), which to me seems a bit light, and after looking online, it seems like a chair footrest for adults must be at least twice that rating. In all honesty, they are just hollow metal tubes, so it is not recommended to let a kid sit on them. I also feel like it doesn't really go out far enough for my height, so that kind of puts the dampener on me being able to use it regularly. I'll just have to continue to use my subwoofer as a footrest! I do not like the armrests being able to shift around as easily as they can, and they are a little too forward-positioned in the chair to comfortably sit close to my desk, because even in the lowest height position, they don't allow me to go under the desk like is possible with my Herman Miller. I also feel like this chair could have been delivered partially constructed, especially the armrests on the seat, and why the aluminum base wasn't already pre-constructed (without the castors) is baffling, considering it would have fit in one of the two boxes that way. The instructions also need to be clearer. On the pamphlet, there's an A to X listing (which is also used in the steps), but none of the physical parts use this lettering system! What I did like I'll be honest, I haven't used it for very long, just one week, and seating comfort is subjective after all! Any spills wiped straight off it, the stitching, and the lines look great, not a fray to be seen or stitch out of place. It looks kind of cool, too. My favorite feature of these seats is the nap mode. While you're not lying completely flat, it leans far back enough to make you easily doze off after a heavy gaming or working session. Overall, this chair offers plenty of comfort features. The MSRP does vary quite a bit depending on the region, at £549.99 in the UK, and €580 in Europe, and $599 before tax in the U.S. However, shipping is free, which is a bonus for such a heavy item. Is it worth it, though? At three years' warranty, I think it's a decent deal. Another firm out of Germany sent me a free replacement hydraulic gas spring for a chair that failed after almost four years, so it was well outside its two-year warranty. My advice is to always try, as you might have the same luck I did. If I could fault it at all, it would be the constant shifting of the armrests and backrest. Where to buy Although the footrest variant normally costs $539.99, it has been discounted to $469.99 on the official website in Black or White. In fact, the non-footrest variant is only $40 cheaper. On Amazon, it currently costs more at $499.99 links below. Sihoo Doro C300 Pro V2 for $469.99 (official website) Sihoo Doro C300 Pro V2 for $499.99 at Amazon US SIHOO provided a free sample without any review or pre-approval. Good to know This Amazon link is U.S. specific, and not available in other regions unless specified. We only use first-party seller links (at the time of article publishing); ensure that you purchase from a first-party seller link only. Check out Today's Deals on Amazon | or our recent tech deals. Become a Prime member (for Students or SNAP) via Neowin Get Prime Access - Prime for half price (for qualifying Medicaid, EBT, SNAP) Subscribe to Prime Video, Audible Plus, Music Unlimited or Kindle Unlimited via Neowin As an Amazon Associate, we earn from qualifying purchases.
    • Making US citizens pay is a prominent tool? Joke of the week…
    • Price Drop: Save 86% on Microsoft Office 2021 Professional Plus lifetime digital license by Steven Parker Today's highlighted deal comes via our Apps + Software section of the Neowin Deals store, where you can save 86% on a lifetime license to Microsoft Office 2021 for Windows. This bundle is for families and small businesses who want classic Office apps and email. It includes Word, Excel, PowerPoint, Outlook, Teams, and OneNote. A one-time purchase installed on 1 Windows PC for use at home or work. Lifetime license for MS Word, Excel, PowerPoint, Outlook, Teams, & OneNote One-time purchase installed on 1 Windows PC for use at home or work Instant Delivery & Download – access your software license keys and download links instantly Free customer service – only the best support! Microsoft Office Professional 2021 (for Windows) includes: Microsoft Office Word Microsoft Office Excel Microsoft Office PowerPoint Microsoft Office Outlook Microsoft Office Teams Microsoft Office OneNote Microsoft Office Publisher Microsoft Office Access No faffing about with subscriptions, just classic apps that don't expire. Good to Know ONE-TIME PURCHASE INSTALLED ON 1 DEVICE Redemption deadline: redeem your code within 30 days of purchase Access options: desktop Full versions No subscriptions – no monthly/annual fees Version: 2021 Updates included* *Support for this version of Office ends on Oct 13, 2026 A lifetime subscription to Microsoft Office 2021 Professional normally costs $219.99, but this deal can be yours for just $29.97, that's a saving of $190. For full terms, specifications, and license info, click the link below. Get Microsoft Office Professional 2021 for just $29.97, or learn more Although priced in U.S. dollars, this deal is available for digital purchase worldwide. Support queries If you have queries or need support for any of the Neowin Deals, please use the contact form here. Neowin Deals are managed and sold by StackCommerce who represent Neowin on an affiliate basis. Why we post these deals We post these because we earn commission on each sale so as not to rely solely on advertising, which many of our readers block. It all helps toward paying staff reporters, servers and hosting costs. So for those that keep moaning and complaining, be thankful we're still online for you to even do that. Other ways to support Neowin Whitelist Neowin by not blocking our ads Create a free member account to see fewer ads Make a donation to support our day to day running costs Subscribe to Neowin - for $14 a year, or $28 a year for an ad-free experience Disclosure: Neowin benefits from revenue of each sale made through our branded deals site powered by StackCommerce.
    • The only reason I want to know where you from is because if you are not from the U.K, then why should you care what we in the U.K do or don't do? Racist I am not, I am fed up with the amount coming over here and feel they can come over here and think we need to support them. Do you know how much it costs this country to support these people coming over here? Even when we give them a place to live it is not good enough. We had a barge that was being used to house immigrants, oh but that was not good enough. A mate said to me at the time, when he was homeless, he would have been happy to live on the barge, instead of ending up sleeping on a bench on the beach. I am not scared to say what my family heritage is, unlike you who is scared to say where they are from or where they live. Father side U.S, mother side Wales, still have family living in the U.S. A mate who sadly died a few years ago, had a load of people from different races recording in his studio, I got on with all of them. Skin colour don't bother me, where they are from don't bother me. Religion don't bother me as long as they don't push it onto me and it is not crazy stuff. I am not religious. But if you are not living in the U.K, then why should you care if we are in the E.U or not? This the problem, too many people poking their noses into where it don't belong. But you believe what you believe, if you think I am racist, then be it, I really do not care. Just grow a pair
  • Recent Achievements

    • Conversation Starter
      jessse3334 earned a badge
      Conversation Starter
    • Reacting Well
      JuvenileDelinquent earned a badge
      Reacting Well
    • One Month Later
      Excellence2025 earned a badge
      One Month Later
    • Week One Done
      Excellence2025 earned a badge
      Week One Done
    • Week One Done
      flexorcist earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      506
    2. 2
      +Edouard
      203
    3. 3
      PsYcHoKiLLa
      151
    4. 4
      Steven P.
      73
    5. 5
      macoman
      62
  • Tell a friend

    Love Neowin? Tell a friend!