|
m |
(7 intermediate revisions not shown) |
Line 1: |
Line 1: |
- | = About me = | + | <div style="font-size: 1em;"> |
- | Sometime
| + | <!-- ==== "Welcome to maemo.org Wiki" and article count ======== --> |
| + | Welcome to the Maemo Wiki, currently featuring [[Special:Statistics|{{NUMBEROFARTICLES}}]] articles. Read [[Special:Newpages|new]] ones, |
| + | browse the [[Special:Categories| list of categories]], jump to a [[Special:Random|random page]] or select your favorite topic from the list below. |
| | | |
- | = My repos = | + | <div class="sections"> |
| + | <div class="column"> |
| + | <div class="section"> |
| + | <h2>Hot Topics</h2> |
| + | <ul class="document">{{Hot Topics}} |
| + | </ul></div> |
| + | <div class="section"> |
| + | ==[[:Category:Community|Our Community]]== |
| + | <ul class="help">{{Community}} |
| + | </ul><h4>Upcoming [[Events]]</h4> |
| + | <ul class="document">{{Events}} |
| + | <span style="font-size: 0.9em; margin-left: 3em;"><em>{{More topics|Community|community}}</em></span> |
| + | </ul></div> |
| + | </div> |
| + | <div class="column"> |
| + | <div class="section"> |
| + | <!-->Audience specific topics<--> |
| + | ==[[:Category:Beginners|Beginner]]== |
| + | <ul class="help">{{Basics}} |
| + | </ul><span style="font-size: 0.9em; margin-left: 3em;"><em>{{More topics|Beginners|beginner}}</em></span></div> |
| + | <div class="section"> |
| + | ==[[:Category:Power users|Power User]]== |
| + | <ul class="help">{{Power users}} |
| + | </ul><span style="font-size: 0.9em; margin-left: 3em;"><em>{{More topics|Power users|power user}}</em></span></div> |
| + | <div class="section"> |
| + | ==[[:Category:Development|Developer]]== |
| + | <ul class="document">{{Development}} |
| + | </ul><span style="font-size: 0.9em; margin-left: 3em;"><em>{{More topics|Development|developer}}</em></span></div> |
| + | </div></div> |
| + | </div> |
| | | |
- | non-optified repo: deb https://repo.codemages.net/ nonopt/
| |
- | optified repo: deb https://repo.codemages.net/ opt/
| |
| | | |
- | What do the repos contain?
| + | __NOEDITSECTION__ <!-- disables the [edit] links from being shown --> |
- | * zsh - just don't set it as your default shell
| + | __NOTOC__ <!-- disable the table of contents from ever being shown --> |
- | * xmms2 with wavpack, mpg123, mpcdec, ogg, flac, etc... support - also updated to not start at max loud
| + | |
- | * fcron - requires some manual work after the install(I'll try to give it an event.d script and do that stuff after the fact but not just yet)
| + | |
- | * gcoreutils and gtar
| + | |
- | * rsyslog
| + | |
- | * curl
| + | |
- | * djmount
| + | |
- | * tinc
| + | |
- | * xset and xrdb
| + | |
| | | |
- | create a fcron user
| + | [[Category:Content]] |
- | chown fcron:fcron /etc/fcron.*
| + | |
- | chown -R fcron:fcron /var/spool/fcron
| + | |
- |
| + | |
- | Then edit /etc/event.d/rcS-late
| + | |
- |
| + | |
- | And after initctl emit MOUNTS_OK
| + | |
- |
| + | |
- | put:
| + | |
- | /etc/init.d/fcron start
| + | |
- | | + | |
- | = Repartitioning =
| + | |
- | Here is what I did to repartition:
| + | |
- | http://talk.maemo.org/showpost.php?p=411490&postcount=51
| + | |
- | | + | |
- | Copied from the post by request:
| + | |
- | | + | |
- | | + | |
- | | + | |
- | #!/bin/bash
| + | |
- |
| + | |
- | echo "Not for running only REFERENCE!!!"
| + | |
- | exit
| + | |
- |
| + | |
- | ### THIS ALL APPLIES TO ALL PR 1.0 PR 1.0.1 PR 1.1 ###
| + | |
- |
| + | |
- | # backup your user
| + | |
- | mount /dev/mmcblk1p1 /media/mmc1
| + | |
- | cp -a /home/user /media/mmc1/
| + | |
- |
| + | |
- | # partitioning
| + | |
- | sfdisk -uM --no-reread /dev/mmcblk0 << FDSK
| + | |
- | 0 2048 c
| + | |
- | 2049 20544 83
| + | |
- | 22593 768 82
| + | |
- | 23361 7170 5
| + | |
- | 23362 2048 83
| + | |
- | 25410 5120 83
| + | |
- |
| + | |
- | FDSK
| + | |
- |
| + | |
- | # REBOOT
| + | |
- |
| + | |
- | # do this sometime
| + | |
- | mkfs.ext2 /dev/mmcblk0p5
| + | |
- | mkfs.ext2 /dev/mmcblk0p2
| + | |
- | mkfs.ext2 /dev/mmcblk0p6
| + | |
- | mkfs.vfat /dev/mmcblk0p1
| + | |
- | mkswap /dev/mmcblk0p3
| + | |
- |
| + | |
- | # change /etc/event.d/rcS-late
| + | |
- | # comment out generation of fstab
| + | |
- | # the following sed command will add a comment character "#"
| + | |
- | # at the start of lines 10-20
| + | |
- | sed "10,20s:\(.*\):#\1:" /etc/event.d/rcS-late > /etc/event.d/rcS-late.new
| + | |
- | cp /etc/event.d/rcS-late.new /etc/event.d/rcS-late
| + | |
- |
| + | |
- | # add mount /home/user/MyDocs
| + | |
- | # this sed command inserts /bin/mount /home/user/MyDocs || echo 'Failed to mount' on line 23
| + | |
- | sed "23i/bin/mount /home/user/MyDocs || echo 'Failed to mount /home/user/MyDocs partition.'" /etc/event.d/rcS-late > /etc/event.d/rcS-late.new
| + | |
- | cp /etc/event.d/rcS-late.new /etc/event.d/rcS-late
| + | |
- | rm /etc/event.d/rcS-late.new
| + | |
- | # change /etc/init.d/rcS
| + | |
- | # this sed command starts on line 197 and if it finds: load_extra_module
| + | |
- | # it will replace it with: load_extra_module newline and a mount for usr and opt
| + | |
- | sed "197s:load_extra_modules:load_extra_modules\nmount /usr || echo 'Failed to mount /usr'\nmount /opt || echo 'Failed to mount /opt':" /etc/init.d/rcS > /etc/init.d/rcS.new
| + | |
- | cp /etc/init.d/rcS.new /etc/init.d/rcS
| + | |
- | rm /etc/init.d/rcS.new
| + | |
- | # fstab
| + | |
- | cat << FSTAB > /etc/fstab
| + | |
- | rootfs / rootfs defaults,errors=remount-ro,noatime 0 0
| + | |
- | /dev/mmcblk0p6 /usr ext2 rw,noatime,nodiratime,errors=continue 0 0
| + | |
- | /dev/mmcblk0p5 /opt ext2 rw,noatime,nodiratime,errors=continue 0 0
| + | |
- | /dev/mmcblk0p3 none swap sw 0 0
| + | |
- | /dev/mmcblk0p2 /home ext2 rw,noatime,nodiratime,errors=continue 0 0
| + | |
- | /dev/mmcblk0p1 /home/user/MyDocs vfat noauto,nodev,noexec,nosuid,noatime,nodiratime,utf8,uid=29999,shortname=mixed,dmask=000,fmask=0133,rodir 0 0
| + | |
- |
| + | |
- | FSTAB
| + | |
- | mkdir /usra
| + | |
- | mount /dev/mmcblk0p6 /usra
| + | |
- | cp -a /usr/* /usra/
| + | |
- | mount /home
| + | |
- | mount /home/user/MyDocs
| + | |
- | mount /dev/mmcblk1p1 /media/mmc1
| + | |
- | cp -a /media/mmc1/user /home/
| + | |
- |
| + | |
- | mkdir /tmproot
| + | |
- | mount -o bind / /tmproot
| + | |
- | Output of df -h
| + | |
- | Filesystem Size Used Available Use% Mounted on
| + | |
- | rootfs 227.8M 142.0M 81.6M 64% /
| + | |
- | /dev/mmcblk0p6 4.9G 293.1M 4.4G 6% /usr
| + | |
- | /dev/mmcblk0p5 2.0G 198.1M 1.7G 10% /opt
| + | |
- | /dev/mmcblk0p2 19.7G 1.2G 17.5G 6% /home
| + | |
- | /dev/mmcblk0p1 2.0G 287.4M 1.7G 14% /home/user/MyDocs
| + | |
- | | + | |
- | = Setting profile from the terminal =
| + | |
- | The reason for fcron in my case was that I wanted the ability to have it set a specific profile at a specific time. This is the script that does this:
| + | |
- | cat /home/user/setprofile.sh
| + | |
- | #!/bin/sh
| + | |
- | profile=$1
| + | |
- |
| + | |
- | dbus-send \
| + | |
- | --print-reply \
| + | |
- | --type=method_call \
| + | |
- | --dest=com.nokia.profiled \
| + | |
- | /com/nokia/profiled com.nokia.profiled.set_profile \
| + | |
- | string:$profile > /dev/null
| + | |
- | echo "$(date +%Y-%m-%dT%H:%M) Set profile to $profile" > /tmp/setprofile.sh.log
| + | |
- | | + | |
- | = My remove list =
| + | |
- | Stuff I removed by default
| + | |
- | | + | |
- | adobe-flashplayer
| + | |
- | amazon-installer
| + | |
- | ap-installer
| + | |
- | as-config-applet-0
| + | |
- | as-daemon-0
| + | |
- | camel-as-provider-0
| + | |
- | camelisync
| + | |
- | ezitext-czech
| + | |
- | ezitext-danish
| + | |
- | ezitext-dutch
| + | |
- | ezitext-english-gb
| + | |
- | ezitext-english-us
| + | |
- | ezitext-essential-plugins
| + | |
- | ezitext-finnish
| + | |
- | ezitext-french-ca
| + | |
- | ezitext-french-fr
| + | |
- | ezitext-german
| + | |
- | ezitext-greek
| + | |
- | ezitext-italian
| + | |
- | ezitext-norwegian
| + | |
- | ezitext-polish
| + | |
- | ezitext-portuguese-pt
| + | |
- | ezitext-russian
| + | |
- | ezitext-spanish-es
| + | |
- | ezitext-spanish-us
| + | |
- | ezitext-swedish
| + | |
- | facebook-installer
| + | |
- | foreca-installer
| + | |
- | google-search-widget
| + | |
- | hildon-welcome
| + | |
- | hildon-welcome-default-logo
| + | |
- | libas-common-utils-0
| + | |
- | libas-protocol-0
| + | |
- | libas-storage-0
| + | |
- | libezitext
| + | |
- | libtinymail-1.0-0
| + | |
- | libtinymail-camel-1.0-0
| + | |
- | libtinymail-gnomevfs-1.0-0
| + | |
- | libtinymail-maemo-1.0-0
| + | |
- | libtinymailui-1.0-0
| + | |
- | libtinymailui-gtk-1.0-0
| + | |
- | modest
| + | |
- | modest-as-plugin-0
| + | |
- | modest-l10n-cscz
| + | |
- | modest-l10n-dadk
| + | |
- | modest-l10n-dede
| + | |
- | modest-l10n-engb
| + | |
- | modest-l10n-enus
| + | |
- | modest-l10n-eses
| + | |
- | modest-l10n-esmx
| + | |
- | modest-l10n-fifi
| + | |
- | modest-l10n-frca
| + | |
- | modest-l10n-frfr
| + | |
- | modest-l10n-itit
| + | |
- | modest-l10n-mr0
| + | |
- | modest-l10n-nlnl
| + | |
- | modest-l10n-nono
| + | |
- | modest-l10n-plpl
| + | |
- | modest-l10n-ptpt
| + | |
- | modest-l10n-ruru
| + | |
- | modest-l10n-svse
| + | |
- | modest-nokiamessaging-plugin-l10n-cscz
| + | |
- | modest-nokiamessaging-plugin-l10n-dadk
| + | |
- | modest-nokiamessaging-plugin-l10n-dede
| + | |
- | modest-nokiamessaging-plugin-l10n-engb
| + | |
- | modest-nokiamessaging-plugin-l10n-enus
| + | |
- | modest-nokiamessaging-plugin-l10n-eses
| + | |
- | modest-nokiamessaging-plugin-l10n-esmx
| + | |
- | modest-nokiamessaging-plugin-l10n-fifi
| + | |
- | modest-nokiamessaging-plugin-l10n-frca
| + | |
- | modest-nokiamessaging-plugin-l10n-frfr
| + | |
- | modest-nokiamessaging-plugin-l10n-itit
| + | |
- | modest-nokiamessaging-plugin-l10n-mr0
| + | |
- | modest-nokiamessaging-plugin-l10n-nlnl
| + | |
- | modest-nokiamessaging-plugin-l10n-nono
| + | |
- | modest-nokiamessaging-plugin-l10n-plpl
| + | |
- | modest-nokiamessaging-plugin-l10n-ptpt
| + | |
- | modest-nokiamessaging-plugin-l10n-ruru
| + | |
- | modest-nokiamessaging-plugin-l10n-svse
| + | |
- | modest-providers-data
| + | |
- | nokiamessaging
| + | |
- | osso-startup-wizard
| + | |
- | osso-tutorial-l10n-cscz
| + | |
- | osso-tutorial-l10n-dadk
| + | |
- | osso-tutorial-l10n-dede
| + | |
- | osso-tutorial-l10n-engb
| + | |
- | osso-tutorial-l10n-enus
| + | |
- | osso-tutorial-l10n-eses
| + | |
- | osso-tutorial-l10n-esmx
| + | |
- | osso-tutorial-l10n-fifi
| + | |
- | osso-tutorial-l10n-frca
| + | |
- | osso-tutorial-l10n-frfr
| + | |
- | osso-tutorial-l10n-itit
| + | |
- | osso-tutorial-l10n-mr0
| + | |
- | osso-tutorial-l10n-nlnl
| + | |
- | osso-tutorial-l10n-nono
| + | |
- | osso-tutorial-l10n-plpl
| + | |
- | osso-tutorial-l10n-ptpt
| + | |
- | osso-tutorial-l10n-ruru
| + | |
- | osso-tutorial-l10n-svse
| + | |
- | ovi-promotion-widget
| + | |
- | rtcom-accounts-plugin-gtalk
| + | |
- | rtcom-accounts-plugin-nokiachat
| + | |
- | sharing-rtcom
| + | |
- | sharing-service-flickr
| + | |
- | sharing-service-ovi
| + | |
- | skyhost-bin
| + | |
- | skyhost-vengine
| + | |
- | status-area-applet-activesync-0
| + | |
- | telepathy-spirit
| + | |
- | tutorial-home-applet
| + | |
- | dtg-installer
| + | |
- | osso-accounts-plugin-skype
| + | |
- | rtcom-abook-skype-plugin
| + | |
- | hildon-desktop-application-shortcuts-mr0
| + | |
- | | + | |
- | You can check what any of these are with: apt-cache show name
| + | |
- | | + | |
- | | + | |
- | = Bootmenu =
| + | |
- | | + | |
- | The following is my setup for /bootmenu.sh
| + | |
- | | + | |
- | It is still a work in progress and requires FBCON to be actually usable.
| + | |
- | | + | |
- | umask 022
| + | |
- | PATH=/sbin:/bin:/usr/sbin:/usr/bin
| + | |
- | MODULES="twl4030-vibra
| + | |
- | dspbridge
| + | |
- | iommu2
| + | |
- | omap3-iommu
| + | |
- | omap34xxcam-mod
| + | |
- | omap_previewer_hack
| + | |
- | board-rx51-camera
| + | |
- | et8ek8
| + | |
- | ad5820
| + | |
- | adp1653
| + | |
- | vs6555
| + | |
- | uinput"
| + | |
- |
| + | |
- | if [ -L /var/run ]
| + | |
- | then
| + | |
- | rm -f /var/run
| + | |
- | mkdir /var/run
| + | |
- | fi
| + | |
- |
| + | |
- | mount -n -t proc proc /proc
| + | |
- | mount -n -t sysfs sysfs /sys
| + | |
- | mount -n -t tmpfs -o size=1M,noatime tmpfs /tmp
| + | |
- | mount -n -t tmpfs -o size=256k,mode=0755,nosuid,noatime tmpfs /var/run
| + | |
- |
| + | |
- |
| + | |
- | mount_devpts() {
| + | |
- | TTYGRP=5
| + | |
- | TTYMODE=620
| + | |
- |
| + | |
- | if [ ! -d /dev/pts ]
| + | |
- | then
| + | |
- | mkdir /dev/pts
| + | |
- | fi
| + | |
- |
| + | |
- | if [ ! -c /dev/ptmx ]
| + | |
- | then
| + | |
- | mknod /dev/ptmx c 5 2
| + | |
- | chmod 666 /dev/ptmx
| + | |
- | fi
| + | |
- |
| + | |
- | mount -n -t devpts -ogid=$TTYGRP,mode=$TTYMODE devpts /dev/pts
| + | |
- | rm -rf /var/tmp/*
| + | |
- | }
| + | |
- |
| + | |
- | # I hate this hack. -- Md
| + | |
- | make_extra_nodes () {
| + | |
- | if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then
| + | |
- | cp -a /lib/udev/devices/* /dev/
| + | |
- | fi
| + | |
- | grep '^[^#]' /etc/udev/links.conf | \
| + | |
- | while read type name arg1; do
| + | |
- | [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
| + | |
- | case "$type" in
| + | |
- | L)
| + | |
- | ln -s $arg1 /dev/$name
| + | |
- | ;;
| + | |
- | D)
| + | |
- | mkdir -p /dev/$name
| + | |
- | ;;
| + | |
- | M)
| + | |
- | mknod /dev/$name $arg1 && chmod 600 /dev/$name
| + | |
- | ;;
| + | |
- | *)
| + | |
- | echo "unparseable line ($type $name $arg1)"
| + | |
- | ;;
| + | |
- | esac
| + | |
- | done
| + | |
- | }
| + | |
- |
| + | |
- | load_extra_modules () {
| + | |
- | echo -n "Loading extra modules..."
| + | |
- | for i in $MODULES; do
| + | |
- | echo "Loading $i"
| + | |
- | modprobe -q $i ||:
| + | |
- | done
| + | |
- | echo "done."
| + | |
- | }
| + | |
- |
| + | |
- | # Mount home and paging partitions if they are available
| + | |
- | mount_mmc(){
| + | |
- | device=$1
| + | |
- | swap=$device"p1"
| + | |
- | home=$device"p2"
| + | |
- | test=$device"p3"
| + | |
- |
| + | |
- | if [ -e $test ]
| + | |
- | then
| + | |
- | echo "Mounting partition $swap for paging"
| + | |
- | # swap disabled as a workaround for Xorg bug, per NB#111807.
| + | |
- | swapon $swap
| + | |
- | modprobe ext3
| + | |
- | echo "Mounting partition $home as home directory"
| + | |
- | mount -t ext3 -o noatime,commit=1,data=writeback $home /home
| + | |
- | else
| + | |
- | echo "No paging partition available as $swap"
| + | |
- | echo "No home partition available as $home"
| + | |
- | fi
| + | |
- | }
| + | |
- |
| + | |
- | prepare_start_udev()
| + | |
- | {
| + | |
- | . /etc/udev/udev.conf
| + | |
- |
| + | |
- | if [ -z "$tmpfs_size" ]; then
| + | |
- | tmpfs_size="1M"
| + | |
- | fi
| + | |
- |
| + | |
- | ACTION=add
| + | |
- | echo -n "Mounting a tmpfs over /dev..."
| + | |
- | mount -n -o size=$tmpfs_size,mode=0755,noatime -t tmpfs none /dev
| + | |
- | echo "done."
| + | |
- | mkdir -p /dev/.udev/db /dev/.udev/queue
| + | |
- | echo "" > /sys/kernel/uevent_helper
| + | |
- | echo -n "Creating extra device nodes... "
| + | |
- | make_extra_nodes
| + | |
- | echo "done."
| + | |
- | }
| + | |
- |
| + | |
- | start_udev()
| + | |
- | {
| + | |
- | prepare_start_udev
| + | |
- | /sbin/udevd --daemon
| + | |
- | }
| + | |
- |
| + | |
- | make_nodes()
| + | |
- | {
| + | |
- | echo -n "Creating device nodes... "
| + | |
- |
| + | |
- | if [ -x /sbin/udevtrigger ]; then
| + | |
- | /sbin/udevtrigger
| + | |
- | else
| + | |
- | /sbin/udevadm trigger
| + | |
- | #wait for all events
| + | |
- | /sbin/udevadm settle
| + | |
- | fi
| + | |
- | echo "done."
| + | |
- | }
| + | |
- |
| + | |
- | start_udev
| + | |
- | make_nodes
| + | |
- | load_extra_modules
| + | |
- | export BOOTSTATE=LOCAL
| + | |
- | touch /tmp/$BOOTSTATE
| + | |
- | echo $BOOTSTATE > /tmp/STATE
| + | |
- | source /etc/resource_limits.conf
| + | |
- | echo "About to exec dsme in state '$BOOTSTATE'."
| + | |
- | /sbin/dsme -p /usr/lib/dsme/libstartup.so &
| + | |
- | e2fsck -vvv -f /dev/mmcblk0p1
| + | |
- | e2fsck -vvv -f /dev/mmcblk0p2
| + | |
- | e2fsck -vvv -f /dev/mmcblk0p5
| + | |
- | e2fsck -vvv -f /dev/mmcblk0p6
| + | |
- | mount /usr/local || echo 'Failed to mount /usr/local'
| + | |
- | mount /opt || echo 'Failed to mount /opt'
| + | |
- |
| + | |
- | mount_devpts
| + | |
- | mount -n -o size=64M,nosuid,nodev,noatime -t tmpfs tmpfs /dev/shm
| + | |
- |
| + | |
- | /sbin/hwclock -s || true
| + | |
- |
| + | |
- |
| + | |
- | hostname -F /etc/hostname
| + | |
- | ifup lo &
| + | |
- | ifup usb0 &
| + | |
- |
| + | |
- | echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
| + | |
- | echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
| + | |
- | echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
| + | |
- | echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
| + | |
- | echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
| + | |
- | echo "49152 65535" > /proc/sys/net/ipv4/ip_local_port_range
| + | |
- | echo 6000 > /sys/class/bluetooth/hci0/idle_timeout
| + | |
- |
| + | |
- | # adjust other kernel parameters to minimize memory consumption
| + | |
- | # and optimize IO pressure
| + | |
- | echo 8 > /proc/sys/kernel/pty/max
| + | |
- | echo 1024 > /proc/sys/kernel/threads-max
| + | |
- | echo 8192 > /proc/sys/fs/file-max
| + | |
- | echo 100 > /proc/sys/vm/swappiness
| + | |
- | echo 5 > /proc/sys/vm/page-cluster
| + | |
- | echo 500 > /proc/sys/vm/dirty_expire_centisecs
| + | |
- | echo 65536 > /proc/sys/net/core/rmem_default
| + | |
- | echo 16384 > /proc/sys/net/core/wmem_default
| + | |
- |
| + | |
- | # Disable sysrq to avoid accidental console-carbage resets.
| + | |
- | echo 0 > /proc/sys/kernel/sysrq
| + | |
- |
| + | |
- | echo "/what/me/worry" > /proc/sys/kernel/core_pattern
| + | |
- | echo 1 > /proc/sys/kernel/panic
| + | |
- | echo 1 > /proc/sys/kernel/panic_on_oops
| + | |
- |
| + | |
- | export BOOTSTATE=LOCAL
| + | |
- | touch /tmp/$BOOTSTATE
| + | |
- | echo $BOOTSTATE > /tmp/STATE
| + | |
- | source /etc/resource_limits.conf
| + | |
- | echo "About to exec dsme in state '$BOOTSTATE'."
| + | |
- | /sbin/dsme -p /usr/lib/dsme/libstartup.so &
| + | |
- | if [ ! -d /var/run/sshd ] ; then
| + | |
- | mkdir /var/run/sshd
| + | |
- | chmod 755 /var/run/sshd
| + | |
- | /usr/sbin/sshd -D &
| + | |
- | fi
| + | |
- |
| + | |
- | exec /bin/sh
| + | |