Merge lp:~vanhoof/project-rootstock/fix-for-LP1017833 into lp:project-rootstock

Proposed by Chris Van Hoof
Status: Needs review
Proposed branch: lp:~vanhoof/project-rootstock/fix-for-LP1017833
Merge into: lp:project-rootstock
Diff against target: 519 lines (+171/-58)
3 files modified
gui/bin/rootstock-gtk (+60/-17)
rootstock (+89/-40)
rootstock.1 (+22/-1)
To merge this branch: bzr merge lp:~vanhoof/project-rootstock/fix-for-LP1017833
Reviewer Review Type Date Requested Status
Oliver Grawert Disapprove
Review via email: mp+112013@code.launchpad.net

Description of the change

= rootstock:setup_kernel_image(): =
 * removes -d from the options called to `rm` to delete $KERNELDIR

To post a comment you must log in.
Revision history for this message
Oliver Grawert (ogra) wrote :

note that rootstock was put to death during the natty cycle when linaro-media-create was created which was supposed to take over all duties of rootstock (the roostock package was removed from the ubuntu archive alongside abandoning the code branch) ...

somehow launchpad doesnt really seem to reflect that lp:project-rootstock is an abandoned branch ...

additionally your fix was not made on top of lp:project-rootstock which ends at commit 129.

review: Disapprove

Unmerged revisions

133. By Chris Van Hoof

rootstock:setup_kernel_image(): remving -d from the options used in rm to delete $KERNELDIR

132. By Angelo Compagnucci

modified:
  gui/bin/rootstock-gtk
    * New options to the gui
      - User setup
      - Password setup
      - Oneiric and precise support
      - Chossing Ubuntu-core file as base
  rootstock
    * New options:
      -u --ubuntu-core to use Ubuntu-core as base
      - Various fixes

131. By Angelo Compagnucci

modified:
  rootstock*
   Fixed code style
  rootstock.1
Merged:
  Svein Seldal 2011-01-25 Added --sources and --apt-upgrade to handle custom apt sources files

130. By Angelo Compagnucci

modified:
  rootstock
   Fixed indentation

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'gui/bin/rootstock-gtk'
2--- gui/bin/rootstock-gtk 2010-03-05 09:44:38 +0000
3+++ gui/bin/rootstock-gtk 2012-06-26 07:07:20 +0000
4@@ -28,13 +28,17 @@
5 import gettext
6 from gettext import gettext as _
7
8-import os
9+import os, sys
10 import fcntl
11 import shutil
12
13-releases = ['lucid', 'karmic', 'jaunty']
14+releases = ['lucid', 'karmic', 'jaunty', 'oneiric', 'precise']
15 icon_theme = gtk.icon_theme_get_default()
16
17+if os.geteuid() != 0:
18+ rpath = os.path.abspath(sys.argv[0])
19+ os.execle('/usr/bin/gksudo', 'gksudo', rpath, os.environ)
20+
21 try:
22 tmpdir = os.environ['TMPDIR']
23 except:
24@@ -60,9 +64,9 @@
25
26 try:
27 pixbuf = icon_theme.load_icon("rootstock_64", 24, 0)
28+ gtk.window_set_default_icon_list(pixbuf)
29 except:
30 pass
31- gtk.window_set_default_icon_list(pixbuf)
32
33 # the menubar
34 mb = gtk.MenuBar()
35@@ -100,43 +104,66 @@
36 tf.set_label_widget(tflbl)
37 tflbl.set_markup(_('<b>General Options</b>'))
38
39- top_table = gtk.Table(5, 2, False)
40+ top_table = gtk.Table(8, 2, False)
41 top_hbox = gtk.HBox(True, 0)
42 top_vbox = gtk.VBox(True, 0)
43 top_hbox.pack_start(top_vbox, False, True, 5)
44 top_vbox.pack_start(top_table, False, True, 5)
45 tf.add(top_hbox)
46
47+ userlabel = gtk.Label(_('User'))
48+ userlabel.set_alignment(xalign=0, yalign=0.5)
49+ self.userentry = gtk.Entry()
50+ self.userentry.insert_text("user", 0)
51+ self.userentry.set_position(-1)
52+ top_table.attach(userlabel, 0, 1, 0, 1)
53+ top_table.attach(self.userentry, 1, 2, 0, 1)
54+
55+ passlabel = gtk.Label(_('Password'))
56+ passlabel.set_alignment(xalign=0, yalign=0.5)
57+ self.passentry = gtk.Entry()
58+ self.passentry.insert_text("rootstock", 0)
59+ self.passentry.set_position(-1)
60+ top_table.attach(passlabel, 0, 1, 1, 2)
61+ top_table.attach(self.passentry, 1, 2, 1, 2)
62+
63 mirrorlabel = gtk.Label(_('Mirror'))
64 mirrorlabel.set_alignment(xalign=0, yalign=0.5)
65 self.mirrorentry = gtk.Entry()
66 self.mirrorentry.insert_text("http://ports.ubuntu.com/ubuntu-ports", 0)
67 self.mirrorentry.set_position(-1)
68- top_table.attach(mirrorlabel, 0, 1, 0, 1)
69- top_table.attach(self.mirrorentry, 1, 2, 0, 1)
70+ top_table.attach(mirrorlabel, 0, 1, 2, 3)
71+ top_table.attach(self.mirrorentry, 1, 2, 2, 3)
72
73 self.xmirror = gtk.CheckButton(_('Use additional mirror'))
74 self.xmirrorentry = gtk.Entry()
75 self.xmirrorentry.set_sensitive(False)
76 self.xmirror.connect("toggled", self.set_sensitivity)
77- top_table.attach(self.xmirror, 0, 1, 1, 2)
78- top_table.attach(self.xmirrorentry, 1, 2, 1, 2)
79+ top_table.attach(self.xmirror, 0, 1, 3, 4)
80+ top_table.attach(self.xmirrorentry, 1, 2, 3, 4)
81
82 releaselabel = gtk.Label(_('Release'))
83 releaselabel.set_alignment(xalign=0, yalign=0.5)
84 self.releaseselect = gtk.combo_box_new_text()
85 for release in releases:
86 self.releaseselect.append_text(release)
87- self.releaseselect.set_active(0)
88- top_table.attach(releaselabel, 0, 1, 2, 3)
89- top_table.attach(self.releaseselect, 1, 2, 2, 3)
90+ self.releaseselect.set_active(4)
91+ top_table.attach(releaselabel, 0, 1, 4, 5)
92+ top_table.attach(self.releaseselect, 1, 2, 4, 5)
93
94 scriptlabel = gtk.Label(_('Custom post installation script'))
95 scriptlabel.set_alignment(xalign=0, yalign=0.5)
96 gtk.stock_add([(gtk.STOCK_OPEN, _('Load Script'), 0, 0, "")])
97 self.scriptfile = gtk.FileChooserButton(_('Select script file'), None)
98- top_table.attach(scriptlabel, 0, 1, 3, 4)
99- top_table.attach(self.scriptfile, 1, 2, 3, 4)
100+ top_table.attach(scriptlabel, 0, 1, 5, 6)
101+ top_table.attach(self.scriptfile, 1, 2, 5, 6)
102+
103+ corelabel = gtk.Label(_('Use ubuntu-core'))
104+ corelabel.set_alignment(xalign=0, yalign=0.5)
105+ gtk.stock_add([(gtk.STOCK_OPEN, _('Load ubuntu-core'), 0, 0, "")])
106+ self.corefile = gtk.FileChooserButton(_('Select ubuntu-core file'), None)
107+ top_table.attach(corelabel, 0, 1, 6, 7)
108+ top_table.attach(self.corefile, 1, 2, 6, 7)
109
110 imgsizelabel = gtk.Label(_('Rootfs build Space'))
111 imgsizelabel.set_alignment(xalign=0, yalign=0.5)
112@@ -147,8 +174,8 @@
113 imgsizeunit.set_alignment(xalign=0, yalign=0.5)
114 imgsizebox.add(imgsizespin)
115 imgsizebox.add(imgsizeunit)
116- top_table.attach(imgsizelabel, 0, 1, 4, 5)
117- top_table.attach(imgsizebox, 1, 2, 4, 5)
118+ top_table.attach(imgsizelabel, 0, 1, 7, 8)
119+ top_table.attach(imgsizebox, 1, 2, 7, 8)
120
121 # middleframe
122 mf = gtk.Frame()
123@@ -166,7 +193,7 @@
124 pkglistlabel = gtk.Label(_('Use a list of packages'))
125 pkglistlabel.set_alignment(xalign=0, yalign=0.5)
126 self.pkglistentry = gtk.Entry()
127- self.pkglistentry.insert_text("ubuntu-minimal", 0)
128+ #self.pkglistentry.insert_text("ubuntu-minimal", 0)
129 middle_table.attach(pkglistlabel, 0, 1, 1, 2)
130 middle_table.attach(self.pkglistentry, 1, 2, 1, 2)
131
132@@ -248,6 +275,10 @@
133
134 def run_build(self, widget):
135 command = ['rootstock -f rootstockfs']
136+ if self.userentry.get_text():
137+ command.append(' -l '+self.userentry.get_text())
138+ if self.passentry.get_text():
139+ command.append(' -p '+self.passentry.get_text())
140 if self.mirrorentry.get_text():
141 command.append(' -m '+self.mirrorentry.get_text())
142 if self.xmirrorentry.get_text():
143@@ -255,7 +286,10 @@
144 command.append(' -d '+releases[self.releaseselect.get_active()])
145 if self.scriptfile.get_filename() != None:
146 command.append(' --script '+str(self.scriptfile.get_filename()))
147- command.append(' -i '+str(int(self.imgsize.get_value()))+'G')
148+ command.append(' -i '+str(int(self.imgsize.get_value()))+'G')
149+ if self.corefile.get_filename() != None:
150+ command.append(' --ubuntu-core '+str(self.corefile.get_filename()))
151+ command.append(' --apt-upgrade ')
152 if self.pkglistentry.get_text():
153 command.append(' -s '+self.pkglistentry.get_text()+' '+str(self.tasks))
154 if self.seedfile.get_filename() != None:
155@@ -265,6 +299,7 @@
156 while gtk.events_pending():
157 gtk.main_iteration(True)
158 #print 'Target partition: '+self.partitionentry.get_text()
159+ print command
160 self.draw_progress_win()
161 self.run_command(command)
162
163@@ -342,6 +377,14 @@
164 ptext = _('Configuring virtual machine for second stage processing ...')
165 lines = 1.0
166 frac = 40.0
167+ if line.startswith('I: Using Chroot for installer'):
168+ ptext = _('Running chroot installer ...')
169+ lines = 1.0
170+ frac = 5.0
171+ if line.startswith('Get:'):
172+ ptext = _('Updating ...')
173+ lines = 1.0
174+ frac = 2.0
175 if line.startswith('packagecount='):
176 lines = 1.0
177 ptext = _('Running second stage package install in virtual machine ...')
178
179=== modified file 'rootstock'
180--- rootstock 2011-02-28 06:06:33 +0000
181+++ rootstock 2012-06-26 07:07:20 +0000
182@@ -4,6 +4,7 @@
183 #
184 # Author: Oliver Grawert <ogra@canonical.com>
185 # Ricardo Salveti <ricardo.salveti@canonical.com>
186+# Svein Seldal <sveinse@seldal.com>
187 #
188 # This program is free software; you can redistribute it and/or
189 # modify it under the terms of the GNU General Public License as
190@@ -36,7 +37,7 @@
191 trap cleanup 1 2 3 6 15
192
193 PROGRAM="$(basename $0)"
194-VERSION="0.1.99.4"
195+VERSION="0.1.99.5"
196
197 log()
198 {
199@@ -141,7 +142,7 @@
200 -c --components <csv list>
201 Archive components
202 (default: main,universe)
203--d --dist (jaunty, karmic, lucid or maverick)
204+-d --dist (jaunty, karmic, lucid, maverick, oneiric, precise)
205 Specify Release to build
206 (default: `lsb_release -cs`)
207 -t --timezone <timezone>
208@@ -150,6 +151,8 @@
209 -x --locale <locale.encoding>
210 Language used in the installed system (i.e. en_US.UTF-8)
211 (default: buildsystem locale)
212+-u --ubuntu-core <filename>
213+ Run rootstock on top of Ubuntu-core (faster because of ready made components)
214 --script <filename>
215 Run this script at the end of the installation process
216 --serial <devicename>
217@@ -204,7 +207,11 @@
218 additional mirror to use
219 --no-root
220 run rootstock without requiring root access (slower as uses a full vm)
221-
222+--sources <filename>
223+ Use <filename> as target apt sources.list file
224+--apt-upgrade
225+ run apt-upgrade after bootstrapping. Useful if multple apt sources are provided
226+ with --sources or --extra-mirror
227 Examples:
228
229 Xubuntu-Desktop (as root): rootstock -f host -l user -p temppwd -i 2G -s xubuntu-desktop
230@@ -371,10 +378,10 @@
231 $CHROOT $ROOTFS debootstrap/debootstrap --second-stage >$DBFIFO 2>&1 &
232 SECOND_STAGE=""
233
234- echo $! > $DBPID
235- while read line; do
236- log "${line}"
237- done <$DBFIFO
238+ echo $! > $DBPID
239+ while read line; do
240+ log "${line}"
241+ done <$DBFIFO
242 fi
243
244 rm -f $DBFIFO
245@@ -449,6 +456,10 @@
246 mount -t proc none ${ROOTFS}/proc
247 mkdir -p ${ROOTFS}/dev/pts
248 mount -t devpts devpts ${ROOTFS}/dev/pts
249+
250+ if [ "$COREFILE" ];then
251+ cp $(which qemu-arm-static) $ROOTFS/usr/bin/
252+ fi
253
254 # do the work
255 $CHROOT $ROOTFS /bin/installer >$CHRFIFO 2>&1 || {
256@@ -552,7 +563,7 @@
257 mkdir -p $CACHEDIR/kernel
258 cp $KERNELDIR/$KERNEL_IMG $CACHEDIR/kernel
259 fi
260- rm -rfd $KERNELDIR
261+ rm -rf $KERNELDIR
262 fi
263
264 #Hack dpkg -i fails, no postinstall script is run anyways, so lets just extract it.
265@@ -639,11 +650,6 @@
266 APT_FORCE="--allow-unauthenticated"
267 }
268
269-add_extra_mirror()
270-{
271- EXRA_MIRROR_CMD="echo \"deb ${EXTRAMIRROR} ${DIST} ${COMPONENTS}\" >>/etc/apt/sources.list"
272-}
273-
274 roll_tarball()
275 {
276 # create a rootfs tgz
277@@ -690,8 +696,17 @@
278 . /etc/default/locale
279 NEWLOCALE=$LANG
280
281+# target apt setup
282+DIST=$(lsb_release -cs)
283+MIRROR="http://ports.ubuntu.com/ubuntu-ports"
284+COMPONENTS="main universe"
285+
286 # default to the build system keyboard setup
287-KBDATA="/etc/default/console-setup"
288+if [ -e "/etc/default/keyboard" ];then
289+ KBDATA="/etc/default/keyboard"
290+else
291+ KBDATA="/etc/default/console-setup"
292+fi
293 XKBL=$(grep XKBLAYOUT ${KBDATA}|tr -d '"'|cut -d '=' -f2)
294 XKBM=$(grep XKBMODEL ${KBDATA}|tr -d '"'|cut -d '=' -f2)
295 XKBV=$(grep XKBVARIANT ${KBDATA}|tr -d '"'|cut -d '=' -f2)
296@@ -700,10 +715,8 @@
297 # default to the build system timezone
298 TZONE=$(cat /etc/timezone)
299
300-# target apt setup
301-DIST=$(lsb_release -cs)
302-MIRROR="http://ports.ubuntu.com/ubuntu-ports"
303-COMPONENTS="main universe"
304+# User-specified sources file
305+USER_SOURCES=""
306
307 # user-specified script
308 USER_SCRIPT=""
309@@ -730,18 +743,20 @@
310
311 PACKAGE_CLEANUP="apt-get clean"
312 PACKAGE_CLEANUP_SUB="${PACKAGE_CLEANUP}"
313+APT_UPGRADE=""
314 APT_UPDATE="apt-get update"
315 APT_FORCE=""
316 EXRA_MIRROR_CMD=""
317 CHROOT="eval TMPDIR=/tmp chroot"
318
319 # parse commandline options
320-GETOPT=`getopt -o hf:l:p:n:s:i:g:m:c:t:x:d:q --long help,fqdn:,login:,\
321+GETOPT=$(getopt -o hf:l:u:p:n:s:i:g:m:c:t:x:d:q: --long help,fqdn:,login:,\
322 password:,fullname:,seed:,imagesize:,manifest:,mirror:,components:,timezone:,\
323 kblayout:,kbmodel:,kbvariant:,kboptions:,locale:,keepimage,notarball,script:,\
324-serial:,doswap,swapsize:,dist:,quiet,kernel-image:,copy-package-cache,\
325-restore-package-cache,clean-package-cache,extra-mirror:,no-root,version \
326--n "$PROGRAM" -- "$@"`
327+serial:,sources:,doswap,swapsize:,dist:,quiet,kernel-image:,copy-package-cache,\
328+restore-package-cache,clean-package-cache,extra-mirror:,ubuntu-core:,\
329+no-root,version,apt-upgrade \
330+-n "$PROGRAM" -- "$@")
331 if [ $? != 0 ]; then usage; exit 1; fi
332 eval set -- "$GETOPT"
333 while true ; do
334@@ -750,6 +765,10 @@
335 usage
336 shift
337 ;;
338+ -u|--ubuntu-core)
339+ COREFILE="$2"
340+ shift 2
341+ ;;
342 -f|--fqdn)
343 FQDN="$2"
344 shift 2
345@@ -843,6 +862,14 @@
346 SERIAL=1
347 shift 2
348 ;;
349+ --sources)
350+ USER_SOURCES="$2"
351+ shift 2
352+ ;;
353+ --apt-upgrade)
354+ APT_UPGRADE="apt-get upgrade -y"
355+ shift
356+ ;;
357 --doswap)
358 NOSWAP=""
359 shift
360@@ -964,7 +991,7 @@
361 if [ "$RUNVM" ] && [ ! $(which qemu-system-arm) ];then
362 echo "qemu not installed, please use:"
363 echo "sudo apt-get install qemu"
364- echo "(or on ubuntu > karmic sudo apt-get install qemu-kvm-extras)"
365+ echo "(or sudo apt-get install qemu-kvm-extras)"
366 echo "to install the qemu package !"
367 exit 1
368 fi
369@@ -1001,17 +1028,30 @@
370 mkdir -p $ROOTFS >>$LOG 2>&1
371 fi
372
373-run_first_stage
374+if [ "$COREFILE" ];then
375+ if [ $DIST = "oneiric" ] || [ $DIST = "precise" ];then
376+ true
377+ else
378+ error "E: $COREFILE not compatible with $DIST, exiting ..."
379+ cleanup
380+ exit 1
381+ fi
382+ if [ -e "$COREFILE" ];then
383+ tar zxf $COREFILE -C $ROOTFS
384+ else
385+ error "E: $COREFILE not found, exiting ..."
386+ cleanup
387+ exit 1
388+ fi
389+else
390+ run_first_stage
391+fi
392
393 # restore cached packages from host machine
394 if [ "$RESTORE_PACKAGE_CACHE" ];then
395 restore_package_cache
396 fi
397
398-if [ "$EXTRAMIRROR" ];then
399- add_extra_mirror
400-fi
401-
402 # basic fstab
403 echo "proc /proc proc defaults 0 0" >$ROOTFS/etc/fstab
404 if [ "$KEEPIMAGE" ];then
405@@ -1090,10 +1130,6 @@
406
407 ${SWAPCMD}
408
409-echo "deb ${MIRROR} ${DIST} ${COMPONENTS}" >/etc/apt/sources.list
410-echo "deb ${MIRROR} ${DIST}-updates ${COMPONENTS}" >>/etc/apt/sources.list
411-${EXRA_MIRROR_CMD}
412-
413 if [ "$RUNVM" ];then
414 ifconfig lo up
415 ifconfig eth0 up
416@@ -1104,10 +1140,10 @@
417 locale-gen --no-purge ${NEWLOCALE} || true
418 echo LANG=${NEWLOCALE} >>/etc/default/locale
419
420-sed -i -e 's/^XKBMODEL=.*\$/XKBMODEL="${XKBM}"/' /etc/default/console-setup || true
421-sed -i -e 's/^XKBLAYOUT=.*\$/XKBLAYOUT="${XKBL}"/' /etc/default/console-setup || true
422-sed -i -e 's/^XKBVARIANT=.*\$/XKBVARIANT="${XKBV}"/' /etc/default/console-setup || true
423-sed -i -e 's/^XKBOPTIONS=.*\$/XKBOPTIONS="${XKBO}"/' /etc/default/console-setup || true
424+sed -i -e 's/^XKBMODEL=.*\$/XKBMODEL="${XKBM}"/' /etc/default/console-setup 2>/dev/null || true
425+sed -i -e 's/^XKBLAYOUT=.*\$/XKBLAYOUT="${XKBL}"/' /etc/default/console-setup 2>/dev/null || true
426+sed -i -e 's/^XKBVARIANT=.*\$/XKBVARIANT="${XKBV}"/' /etc/default/console-setup 2>/dev/null || true
427+sed -i -e 's/^XKBOPTIONS=.*\$/XKBOPTIONS="${XKBO}"/' /etc/default/console-setup 2>/dev/null || true
428
429 echo ${AREA}/${ZONE} > /etc/timezone
430 cp -f /usr/share/zoneinfo/${AREA}/${ZONE} /etc/localtime || true
431@@ -1115,6 +1151,7 @@
432 groupadd fuse || true
433
434 ${APT_UPDATE}
435+${APT_UPGRADE}
436
437 ${PACKAGE_CLEANUP}
438
439@@ -1137,14 +1174,13 @@
440 else
441 echo "I: Enabling firstboot configuration (as no user/password" \
442 "definition was found at the argument list)"
443- PACKAGE="oem-config"
444+ PACKAGE="oem-config-gtk"
445 if [ -n "\$(dpkg -l xserver-xorg 2>/dev/null|grep ^ii)" ];then
446- if [ \$(which gdm) ];then
447- PACKAGE="oem-config-gtk"
448- elif [ \$(which kdm) ];then
449+ if [ \$(which kdm) ];then
450 PACKAGE="oem-config-kde"
451 fi
452 fi
453+ echo "I: Installing \$PACKAGE"
454 apt-get install -y --no-install-recommends \$PACKAGE
455 touch /var/lib/oem-config/run
456 rm /usr/lib/ubiquity/plugins/ubi-tasks.py*
457@@ -1173,6 +1209,19 @@
458
459 EOF
460
461+if [ "$USER_SOURCES" ]; then
462+ # Copy user provided sources file
463+ cp "$USER_SOURCES" "$ROOTFS/etc/apt/sources.list"
464+else
465+ # Use system default deb source
466+ echo "deb ${MIRROR} ${DIST} ${COMPONENTS}" >$ROOTFS/etc/apt/sources.list
467+
468+ # Add extra debsource
469+ if [ "$EXTRAMIRROR" ];then
470+ echo "deb ${EXTRAMIRROR} ${DIST} ${COMPONENTS}" >>${ROOTFS}/etc/apt/sources.list
471+ fi
472+fi
473+
474 # copy over user script
475 if [ "$USER_SCRIPT" ]; then
476 cp "$USER_SCRIPT" "$ROOTFS/rootstock-user-script"
477
478=== modified file 'rootstock.1'
479--- rootstock.1 2010-08-02 13:56:53 +0000
480+++ rootstock.1 2012-06-26 07:07:20 +0000
481@@ -1,5 +1,5 @@
482 .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.38.2.
483-.TH ROOTSTOCK "1" "August 2010" "rootstock 0.1.99.4" "User Commands"
484+.TH ROOTSTOCK "1" "January 2011" "rootstock 0.1.99.4" "User Commands"
485 .SH NAME
486 rootstock \- manual page for rootstock 0.1.99.4
487 .SH SYNOPSIS
488@@ -167,6 +167,15 @@
489 \fB\-\-no\-root\fR
490 .IP
491 run rootstock without requiring root access (slower as uses a full vm)
492+.PP
493+\fB\-\-sources\fR <filename>
494+.IP
495+Use <filename> as target apt sources.list file
496+.PP
497+\fB\-\-apt\-upgrade\fR
498+.IP
499+run apt\-upgrade after bootstrapping. Useful if multple apt sources are provided
500+with \fB\-\-sources\fR or \fB\-\-extra\-mirror\fR
501 .SH EXAMPLES
502
503 Xubuntu\-Desktop (as root): rootstock \fB\-f\fR host \fB\-l\fR user \fB\-p\fR temppwd \fB\-i\fR 2G \fB\-s\fR xubuntu\-desktop
504@@ -186,3 +195,15 @@
505 .br
506 This is free software: you are free to change and redistribute it.
507 There is NO WARRANTY, to the extent permitted by law.
508+.SH "SEE ALSO"
509+The full documentation for
510+.B rootstock
511+is maintained as a Texinfo manual. If the
512+.B info
513+and
514+.B rootstock
515+programs are properly installed at your site, the command
516+.IP
517+.B info rootstock
518+.PP
519+should give you access to the complete manual.

Subscribers

People subscribed via source and target branches