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

    • Removed the blue and underline as you did not post a link. This would also  be considered spamming.
    • Why it's almost impossible to produce a smartphone in the United States by Hamid Ganji If you look at the back of some Apple products, you can see the famous phrase “Designed by Apple in California, Assembled in China.” This phrase appears on products from one of the largest smartphone brands in the United States. These products are designed in the U.S., but their manufacturing takes place in China, India, Vietnam, or even Brazil. But why can’t Apple, as one of the largest American tech companies, produce its iPhones on U.S. soil? The idea for this topic came to me after the Trump Foundation launched a smartphone called the T1 and claimed that it was designed and built with American values in mind. However, this claim did not last long, as it was revealed that Trump’s phone was actually a rebranded HTC U24 Pro, with only a gold case and minor internal component changes. You see? Even a phone that is supposed to represent American values is manufactured in China. With a gross domestic product (GDP) exceeding $32 trillion, the United States is currently the world’s largest economy, while China ranks second with around $20 trillion. On the other hand, the United States is by a wide margin the global leader in various technological fields, and American companies spend hundreds of billions of dollars annually on research and development. From Apple and Google to Microsoft, Lockheed Martin, Boeing, and others, American tech and industrial giants lead their foreign competitors in many sectors. The United States also has no shortage of smartphone brands. Apple, Google, and Motorola are among the major brands in the smartphone market, collectively holding a significant share. However, the vast majority of their products are manufactured outside the United States. So why is it that the world’s largest economy, home to the most advanced technology companies and industrial powers, cannot produce a smartphone on its own soil? Let’s explore this question together. Even threats to impose tariffs won’t work After Trump entered the White House as the 47th President of the United States, his administration adopted strict tariff policies. One of these policies was the imposition of a 25% tariff on smartphones manufactured outside the United States. Trump said he “had a little problem” with Apple CEO Tim Cook over producing smartphones outside the U.S. So he thought that threatening a 25% tax on imported phones might force Apple to bring manufacturing back to the United States. “I have long ago informed Tim Cook of Apple that I expect their iPhones that will be sold in the United States of America will be manufactured and built in the United States, not India, or anyplace else,” Trump wrote on Truth Social. Image via The White House Although Apple currently manufactures some of the iPhone’s chips in the United States with TSMC's help, it still shows no willingness to shift full iPhone production to the country. At the time, renowned Apple supply chain analyst Ming-Chi Kuo wrote on X, “In terms of profitability, it’s way better for Apple to take the hit of a 25% tariff on iPhones sold in the US market than to move iPhone assembly lines back to the US.” However, manufacturing a smartphone in the United States is not as easy as it might seem, and many technical and economic barriers are involved. The lack of necessary manufacturing hubs There is a clear reason why many companies prefer to manufacture their products in China. China has established itself as the main global manufacturing hub for international companies, and over the past few decades, large contract manufacturers have emerged there, allowing companies like Apple to outsource production. One such example is Foxconn, which also manufactures some Apple products in India. Building the infrastructure required to produce smartphones in the United States would require tens of billions of dollars in new investment. Factories would need to be built, essential manufacturing equipment would have to be installed, and, most importantly, a skilled workforce capable of operating these systems would need to be recruited and trained. The United States currently lacks the core infrastructure needed to manufacture smartphones, and for this reason, many companies prefer to outsource production to Chinese contractors rather than spend tens of billions of dollars to build that infrastructure, which is significantly more economically efficient. Additionally, building such infrastructure in the United States could take up to a decade, ultimately leading to a significant increase in the product's final price for consumers. Shortage of trained labor in the U.S. compared to China Decades of serving as a global manufacturing hub have allowed China to build a massive talent pool in the production sector that is almost unmatched worldwide. Today, if a company chooses to manufacture its products in China, it can be confident that the workers involved in production have years of experience in their respective roles and are capable of producing high-quality goods with minimal errors. Even if we assume that tens of billions of dollars were invested in building smartphone manufacturing infrastructure in the United States, finding skilled workers would remain highly challenging. Apple CEO Tim Cook visiting the iPhone 6 assembly line in China in 2014. Image: Tim Cook on X In a 2015 interview on CBS’s 60 Minutes, Tim Cook said the main reason Apple isn’t producing in the US is a lack of skills. "China put an enormous focus on manufacturing, in what you and I would call vocational kind of skills. The US over time began to stop having as many vocational kinds of skills. I mean you could take every tool and die maker in the United States and probably put them in the room that we're currently sitting in. In China you would have to have multiple football fields,” Cook said. Also, in 2017, at the Fortune Global Forum in Guangzhou, Cook once again emphasized the importance of highly skilled Chinese workers. “China has moved into very advanced manufacturing, so you find in China the intersection of craftsman kind of skill, and sophisticated robotics and the computer science world. That intersection, which is very rare to find anywhere, that kind of skill, is very important to our business because of the precision and quality level that we like. The thing that most people focus on if they’re a foreigner coming to China is the size of the market, and obviously, it’s the biggest market in the world in so many areas. But for us, the number one attraction is the quality of the people,” Apple CEO said. Higher labor costs in the United States Producing almost any product in the United States is more expensive than in many other countries, and one of the main reasons is the higher cost of labor in the U.S. According to the Bureau of Labor Statistics, median weekly earnings of full-time workers in the United States were $1,235 in the first quarter of 2026. Meanwhile, the average annual salary in China's private sector in 2025 was RMB 71,590 (US$9,961). In many parts of the world, the weekly wage of an American worker is equivalent to several months of income. Another important factor to consider is that in the United States, the workforce capable of working on a smartphone assembly line is highly specialized and therefore commands higher-than-average wages. According to an estimate by Bank of America, producing an iPhone in the U.S. is technically possible, but “iPhone cost can increase 25% purely on higher labor cost in the U.S.” However, this 25% increase applies only if final assembly is performed in the United States while components are still sourced from China or elsewhere. In this case, the price of a base iPhone would rise from $799 to around $1,000. But in another scenario, if Apple were to produce the required components for the iPhone within the United States, production costs could increase by more than 90%. Trump’s dream for a “Made in the USA” iPhone might never come true In a free-market capitalist economy, one of the primary responsibilities of any CEO is to maximize profit. Using Apple as an example, Tim Cook’s role is to maximize the company’s profits so that it can fund research and development for new products and invest in areas such as artificial intelligence, while also keeping shareholders satisfied. Therefore, it is entirely understandable that Apple would choose not to bring its manufacturing back to the United States and instead keep production in countries where labor is cheaper, and products can be manufactured at a lower cost, thereby maximizing its profit margins. What is your opinion about manufacturing smartphones in the United States? If you are an American citizen, would you be willing to pay hundreds of dollars more for a smartphone made domestically in the USA? Let us know in the comments.
    • Cheers everyone for the replies. It's been very useful. 👍
  • 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
      505
    2. 2
      +Edouard
      195
    3. 3
      PsYcHoKiLLa
      153
    4. 4
      Steven P.
      71
    5. 5
      FloatingFatMan
      66
  • Tell a friend

    Love Neowin? Tell a friend!