How do install Opensuse over serial port without an OS on that machine?

There are a few partitions on that machine, but nothing bootable and nothing I need. I have another computer connected to it via serial cable that I want to use for installation of Opensuse on the headless servermachine. Question is: How do I “transfer” my Opensuse 12.2 iso setup and start it through serial connection?
I see this article, but it doesn’t say anything in regards to serial cable connection:

SDB:Remote installation - openSUSE

Here are the serial port technical details:


linux-d7fx:/home/pc # dmesg | grep ttyS*    0.000000] console [tty0] enabled
    0.613539] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
    0.634295] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A



linux-d7fx:/home/pc # stty < /dev/ttyS0speed 9600 baud; line = 0;
kill = ^H; min = 100; time = 2;
-icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo

I tried doing “screen /dev/ttyS0 9600”, but it shows nothing. (not sure what that means, because my computer doesn’t boot anyway, with a display connected it would just show “mbr not found”.

I also found this GNU GRUB Manual 2.00~rc1 but it’s always very confusing on which computer I actually have to do these steps…either on my deskto computer, or the headless server? I don’t know, it’s a question on every article I read.

Pls help me install Opensuse on my displayless, OS-less machine!

Can your PC boot from USB stick or network? Does it have bootable CD or DVD?

Yes, I can make a bootable USB stick, but how does that help me? Anyway, are you saying it’s impossible to install through serial cable?

It depends on what you are trying to do …

are you saying it’s impossible to install through serial cable?

It is definitely impossible to install through serial cable, at least on commodity PC systems. What is possible is to tell bootloader and kernel to use serial port as console. But it is not really required if you want to install something. You simply tell installer to start up network, connect using SSH or VNC (article you mention describes SSH way) and continue installation as usual.

On 2012-10-06 09:56, Maxxi12 wrote:
> Yes, I can make a bootable USB stick, but how does that help me?
> Anyway, are you saying it’s impossible to install through serial cable?

Of course it is impossible. Does your bios has the capability to load software via serial port?
I guess not, because I have never seen it on PCs. You do have to boot something in that
machine, and it is that thing you boot which uses the serial port to communicate with you. The
only method to boot something that is not already in the hard disk is using some other boot
media…

There is the possibility with some bioses to boot from the network. I have never seen boot from
serial port.


Cheers / Saludos,

Carlos E. R.
(from 12.1 x86_64 “Asparagus” at Telcontar)

If you can create a LiveUSB, I would create one and use it to install openSUSE.

S.C.L.U. - SuSE Create Live USB - Version 1.12 - Blogs - openSUSE Forums

Thank You,

Ok I installed from flash drive, but now I’m trying to control the PC/boot with my serial cable, but I’m only getting this during the entirety of the boot:

se the ^ 5;76Hically i 5;76H5;76H The highlighted entry will be 5;76Hghlighterectory.ile Systng created Secur: setup etwork

I don’t know what to make of this, to my knowledge I did everything right: I added a kernel parameter in yast to the optional kernel command line parameter “console=ttyS0,9600” and I checked the checkbox in yast boot loader option “use serial console” and as arguments I specified: “serial --unit=0 --speed=9600”

Is that not correct?

Which bootloader do you use?

Grub2 with OpenSUSE 12.2

Could you post /boot/grub2/grub.cfg?

linux-djbt:/home/pc # cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if  -s $prefix/grubenv ]; then
  load_env
fi
set default="${saved_entry}"

if  x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if  "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if  -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if  x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

serial --unit=0 --speed=9600
terminal_input serial
terminal_output serial
if  x${boot_once} = xtrue ]; then
  set timeout=0
elif sleep --interruptible 0 ; then
  set timeout=8
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE 12.2' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-953780b9-8ec1-4cfd-9765-99ebf5b02b44' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos2'
    if  x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  953780b9-8ec1-4cfd-9765-99ebf5b02b44
    else
      search --no-floppy --fs-uuid --set=root 953780b9-8ec1-4cfd-9765-99ebf5b02b44
    fi
    echo    'Loading Linux 3.4.6-2.10-desktop ...'
    linux    /boot/vmlinuz-3.4.6-2.10-desktop root=UUID=953780b9-8ec1-4cfd-9765-99ebf5b02b44   resume=/dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90Z208665-part1 splash=silent quiet showopts console=ttyS0,9600
    echo    'Loading initial ramdisk ...'
    initrd    /boot/initrd-3.4.6-2.10-desktop
}
submenu 'Advanced options for openSUSE 12.2' $menuentry_id_option 'gnulinux-advanced-953780b9-8ec1-4cfd-9765-99ebf5b02b44' {
    menuentry 'openSUSE 12.2, with Linux 3.4.6-2.10-desktop' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.4.6-2.10-desktop-advanced-953780b9-8ec1-4cfd-9765-99ebf5b02b44' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos2'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  953780b9-8ec1-4cfd-9765-99ebf5b02b44
        else
          search --no-floppy --fs-uuid --set=root 953780b9-8ec1-4cfd-9765-99ebf5b02b44
        fi
        echo    'Loading Linux 3.4.6-2.10-desktop ...'
        linux    /boot/vmlinuz-3.4.6-2.10-desktop root=UUID=953780b9-8ec1-4cfd-9765-99ebf5b02b44   resume=/dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90Z208665-part1 splash=silent quiet showopts console=ttyS0,9600
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-3.4.6-2.10-desktop
    }
    menuentry 'openSUSE 12.2, with Linux 3.4.6-2.10-desktop (recovery mode)' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.4.6-2.10-desktop-recovery-953780b9-8ec1-4cfd-9765-99ebf5b02b44' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos2'
        if  x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  953780b9-8ec1-4cfd-9765-99ebf5b02b44
        else
          search --no-floppy --fs-uuid --set=root 953780b9-8ec1-4cfd-9765-99ebf5b02b44
        fi
        echo    'Loading Linux 3.4.6-2.10-desktop ...'
        linux    /boot/vmlinuz-3.4.6-2.10-desktop root=UUID=953780b9-8ec1-4cfd-9765-99ebf5b02b44  showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd-3.4.6-2.10-desktop
    }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if  -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif  -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###


I tested this in VM using serial console and it works just fine. I get all expected output including GRUB2 boot menu as well as console prompt. So it definitely works. If you do not see even GRUB2 menu, I can only suggest rechecking your serial setup on client side. Also try different terminal type emulation.

Hmm … your output looks like some characters get lost. This suggests problem with flow control. Try to configure XON/XOFF flow control on both sides, it does not require any explicit hardware support.

Thank you so much for checking this out! Just now I was in a hurry and I didn’t plug in my VGA display to double check the boot like I always did previously. And now it worked! Apparently the VGA input somehow messes with the data.