Ignore:
Timestamp:
Nov 6, 2007, 11:01:53 AM (13 years ago)
Author:
Bruno Cornec
Message:
  • Better output for mindi-busybox revision
  • Remove dummy file created on NFS - report from Arnaud Tiger <arnaud.tiger_at_hp.com>
  • strace useful for debug
  • fix new versions for pb (2.0.0 for mindi and 1.7.2 for mindi-busybox)
  • fix build process for mindi-busybox + options used in that version (dd for label-partitions-as-necessary)
  • fix typo in label-partitions-as-necessary which doesn't seem to work
  • Update to busybox 1.7.2
  • perl is now required at restore time to support uuid swap partitions (and will be used for many other thigs

in the future for sure)

  • next mindi version will be 2.0.0 due to all the changes made in it (udev may break working distros)
  • small optimization in mindi on keyboard handling (one single find instead of multiple)
  • better interaction for USB device when launching mindi manually
  • attempt to automatically guess block disk size for ramdisk
  • fix typos in bkphw
  • Fix the remaining problem with UUID support for swap partitions
  • Updates mondoarchive man page for USB support
  • Adds preliminary Hardware support to mindi (Proliant SSSTK)
  • Tries to add udev support also for rhel4
  • Fix UUID support which was still broken.
  • Be conservative in test for the start-nfs script
  • Update config file for mindi-busybox for 1.7.2 migration
  • Try to run around a busybox bug (1.2.2 pb on inexistant links)
  • Add build content for mindi-busybox in pb
  • Remove distributions content for mindi-busybox
  • Fix a warning on inexistant raidtab
  • Solve problem on tmpfs in restore init (Problem of inexistant symlink and busybox)
  • Create MONDO_CACHE and use it everywhere + creation at start
  • Really never try to eject a USB device
  • Fix a issue with &> usage (replaced with 1> and 2>)
  • Adds magic file to depllist in order to have file working + ldd which helps for debugging issues
  • tty modes correct to avoid sh error messages
  • Use ext3 normally and not ext2 instead
  • USB device should be corrected after reading (take 1st part)
  • Adds a mount_USB_here function derived from mount_CDROM_here
  • usb detection place before /dev detection in device name at restore time
  • Fix when restoring from USB: media is asked in interactive mode
  • Adds USB support for mondorestore
  • mount_cdrom => mount_media
  • elilo.efi is now searched throughout /boot/efi and not in a fixed place as there is no standard
  • untar-and-softlink => untar (+ interface change)
  • suppress useless softlinks creation/removal in boot process
  • avoids udevd messages on groups
  • Increase # of disks to 99 as in mindi at restore time (should be a conf file parameter)
  • skip existing big file creation
  • seems to work correctly for USB mindi boot
  • Adds group and tty link to udev conf
  • Always load usb-torage (even 2.6) to initiate USB bus discovery
  • Better printing of messages
  • Attempt to fix a bug in supporting OpenSusE 10.3 kernel for initramfs (mindi may now use multiple regex for kernel initrd detection)
  • Links were not correctly done as non relative for modules in mindi
  • exclusion of modules denied now works
  • Also create modules in their ordinary place, so that classical modprobe works + copy modules.dep
  • Fix bugs for DENY_MODS handling
  • Add device /dev/console for udev
  • ide-generic should now really be excluded
  • Fix a bug in major number for tty
  • If udev then adds modprobe/insmod to rootfs
  • tty0 is also cretaed with udev
  • ide-generic put rather in DENY_MODS
  • udevd remove from deplist s handled in mindi directly
  • better default for mindi when using --usb
  • Handles dynamically linked busybox (in case we want to use it soon ;-)
  • Adds fixed devices to create for udev
  • ide-generic should not be part of the initrd when using libata v2
  • support a dynamically linked udev (case on Ubuntu 7.10 and Mandriva 2008.0 so should be quite generic) This will give incitation to move to dyn. linked binaries in the initrd which will help for other tasks (ia6 4)
  • Improvement in udev support (do not use cl options not available in busybox)
  • Udev in mindi
    • auto creation of the right links at boot time with udev-links.conf(from Mandriva 2008.0)
    • rework startup of udev as current makes kernel crash (from Mandriva 2008.0)
    • add support for 64 bits udev
  • Try to render MyInsmod? silent at boot time
  • Adds udev support (mandatory for newest distributions to avoid remapping of devices in a different way as on the original system)
  • We also need vaft format support for USB boot
  • Adds libusual support (Ubuntu 7.10 needs it for USB)
  • Improve Ubuntu/Debian? keyboard detection and support
  • pbinit adapted to new pb (0.8.10). Filtering of docs done in it
  • Suppress some mondo warnings and errors on USB again
  • Tries to fix lack of files in deb mindi package
  • Verify should now work for USB devices
  • More log/mesages improvement for USB support
  • - Supress g_erase_tmpdir_and_scratchdir
  • Improve some log messages for USB support
  • Try to improve install in mindi to avoid issues with isolinux.cfg not installed vene if in the pkg :-(
  • Improve mindi-busybox build
  • In conformity with pb 0.8.9
  • Add support for Ubuntu 7.10 in build process
  • Add USB Key button to Menu UI (CD streamer removed)
  • Attempt to fix error messages on tmp/scratch files at the end by removing those dir at the latest possible.
  • Fix a bug linked to the size of the -E param which could be used (Arnaud Tiger/René? Ribaud).
  • Integrate ~/.pbrc content into mondorescue.pb (required project-builder >= 0.8.7)
  • Put mondorescue in conformity with new pb filtering rules
  • Add USB support at restore time (no test done yet). New start-usb script PB varibale added where useful
  • Unmounting USB device before removal of temporary scratchdir
  • Stil refining USB copy back to mondo (one command was not executed)
  • No need to have the image subdor in the csratchdir when USB.
  • umount the USB partition before attempting to use it
  • Remove useless copy from mindi to mondo at end of USB handling

(risky merge, we are raising the limits of 2 diverging branches. The status of stable is not completely sure as such. Will need lots of tests, but it's not yet done :-()
(merge -r1692:1769 $SVN_M/branches/2.2.5)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/stable/mindi-busybox/docs/busybox.net/FAQ.html

    r821 r1770  
    1111<li><a href="#getting_started">How can I get started using BusyBox?</a></li>
    1212<li><a href="#configure">How do I configure busybox?</a></li>
     13<li><a href="#build">How do I build BusyBox with a cross-compiler?</a></li>
    1314<li><a href="#build_system">How do I build a BusyBox-based system?</a></li>
    1415<li><a href="#kernel">Which Linux kernel versions are supported?</a></li>
     
    2526<ol>
    2627<li><a href="#bugs">I think I found a bug in BusyBox!  What should I do?!</a></li>
     28<li><a href="#backporting">I'm using an ancient version from the dawn of time and something's broken.  Can you backport fixes for free?</a></li>
    2729<li><a href="#init">Busybox init isn't working!</a></li>
    2830<li><a href="#sed">I can't configure busybox on my system.</a></li>
    2931<li><a href="#job_control">Why do I keep getting "sh: can't access tty; job control turned off" errors?  Why doesn't Control-C work within my shell?</a></li>
     32</ol>
     33
     34<h2>Misc. questions</h2>
     35<ol>
     36  <li><a href="#tz">How do I change the time zone in busybox?</a></li>
    3037</ol>
    3138
     
    5158    <li><a href="#tips_kernel_headers">Including Linux kernel headers.</a></li>
    5259  </ul>
    53   <li><a href="#who">Who are the BusyBox developers?</a></li>
    54 </ul>
    55 
    56 
     60    <li><a href="#who">Who are the BusyBox developers?</a></li>
     61  </ul>
    5762</ol>
    5863
     64
     65<hr />
    5966<h1>General questions</h1>
    6067
    6168<hr />
    62 <p>
    6369<h2><a name="getting_started">How can I get started using BusyBox?</a></h2>
     70
    6471<p> If you just want to try out busybox without installing it, download the
    6572    tarball, extract it, run "make defconfig", and then run "make".
     
    8289</p>
    8390<p>
    84     BusyBox also has a feature called the "standalone shell", where the busybox
     91    BusyBox also has a feature called the
     92    <a name="standalone_shell">"standalone shell"</a>, where the busybox
    8593    shell runs any built-in applets before checking the command path.  This
    8694    feature is also enabled by "make allyesconfig", and to try it out run
     
    8896    and run busybox as your command shell, so the only commands it can find
    8997    (without an explicit path such as /bin/ls) are the built-in busybox ones.
    90     This is another good way to see what's built into busybox.  (Note that the
    91     standalone shell is dependent on the existence of /proc/self/exe, so before
    92     using it in a chroot environment you must mount /proc.)
    93 </p>
    94 
    95 <hr />
    96 <p>
     98    This is another good way to see what's built into busybox.
     99    Note that the standalone shell requires CONFIG_BUSYBOX_EXEC_PATH
     100    to be set appropriately, depending on whether or not /proc/self/exe is
     101    available or not. If you do not have /proc, then point that config option
     102    to the location of your busybox binary, usually /bin/busybox.
     103    (So if you set it to /proc/self/exe, and happen to be able to chroot into
     104    your rootfs, you must mount /proc beforehand.)
     105</p>
     106<p>
     107    A typical indication that you set CONFIG_BUSYBOX_EXEC_PATH to proc but
     108    forgot to mount proc is:
     109<pre>
     110$ /bin/echo $PATH
     111/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
     112$ echo $PATH
     113/bin/sh: echo: not found
     114</pre>
     115
     116<hr />
    97117<h2><a name="configure">How do I configure busybox?</a></h2>
     118
    98119<p> Busybox is configured similarly to the linux kernel.  Create a default
    99120    configuration and then run "make menuconfig" to modify it.  The end
     
    141162    busybox features, and get help about each feature.
    142163
    143 
    144 
    145164<p>
    146165    To build a smaller busybox binary, run "make menuconfig" and disable the
     
    149168    with "make" once you've finished configuring.)
    150169</p>
    151 <hr/>
    152 <p/>
     170
     171<hr />
     172<h2><a name="build">How do I build BusyBox with a cross-compiler?</a></h2>
     173
     174<p>
     175   To build busybox with a cross-compiler, specify CROSS_COMPILE=&lt;prefix&gt;.
     176</p>
     177<p>
     178   CROSS_COMPILE specifies the prefix used for all executables used
     179   during compilation. Only gcc and related binutils executables
     180   are prefixed with $(CROSS_COMPILE) in the makefiles.
     181   CROSS_COMPILE can be set on the command line:
     182<pre>
     183   make CROSS_COMPILE=arm-linux-uclibcgnueabi-
     184</pre>
     185   Alternatively CROSS_COMPILE can be set in the environment.
     186   Default value for CROSS_COMPILE is not to prefix executables.
     187</p>
     188
     189<hr />
    153190<h2><a name="build_system">How do I build a BusyBox-based system?</a></h2>
     191
    154192<p>
    155193    BusyBox is a package that replaces a dozen standard packages, but it is
     
    192230
    193231<hr />
    194 <p>
    195232<h2><a name="kernel">Which Linux kernel versions are supported?</a></h2>
     233
    196234<p>
    197235    Full functionality requires Linux 2.4.x or better.  (Earlier versions may
     
    202240    are into that sort of thing).
    203241</p>
    204 <hr />
    205 <p>
     242
     243<hr />
    206244<h2><a name="arch">Which architectures does BusyBox run on?</a></h2>
     245
    207246<p>
    208247    BusyBox in general will build on any architecture supported by gcc.
     
    214253    With 2.6.x kernels, module loading support should work on all architectures.
    215254</p>
    216 <hr />
    217 <p>
     255
     256<hr />
    218257<h2><a name="libc">Which C libraries are supported?</a></h2>
     258
    219259<p>
    220260    On Linux, BusyBox releases are tested against uClibc (0.9.27 or later) and
     
    236276
    237277<hr />
    238 <p>
    239278<h2><a name="commercial">Can I include BusyBox as part of the software on my device?</a></h2>
    240 <p>
    241279
    242280<p>
     
    247285
    248286<hr />
    249 <p>
    250 <h2><a name="external">where can i find other small utilities since busybox
     287<h2><a name="external">Where can I find other small utilities since busybox
    251288    does not include the features i want?</a></h2>
     289
    252290<p>
    253291    we maintain such a <a href="tinyutils.html">list</a> on this site!
     
    255293
    256294<hr />
    257 <p>
    258295<h2><a name="demanding">I demand that you to add &lt;favorite feature&gt; right now!   How come you don't answer all my questions on the mailing list instantly?  I demand that you help me with all of my problems <em>Right Now</em>!</a></h2>
    259 <p>
    260 
     296
     297<p>
    261298    You have not paid us a single cent and yet you still have the product of
    262299    many years of our work.  We are not your slaves!  We work on BusyBox
     
    264301    will ignore you.
    265302
    266 
    267 <hr />
    268 <p>
     303<hr />
    269304<h2><a name="helpme">I need help with BusyBox!  What should I do?</a></h2>
    270 <p>
    271 
     305
     306<p>
    272307    If you find that you need help with BusyBox, you can ask for help on the
    273308    BusyBox mailing list at busybox@busybox.net.</p>
     
    297332
    298333<hr />
    299 <p>
    300334<h2><a name="contracts">I need you to add &lt;favorite feature&gt;!  Are the BusyBox developers willing to be paid in order to fix bugs or add in &lt;favorite feature&gt;?  Are you willing to provide support contracts?</a></h2>
    301 </p>
    302335
    303336<p>
     
    317350
    318351
    319 
    320 
     352<hr />
    321353<h1>Troubleshooting</h1>
    322354
    323355<hr />
    324 <p></p>
    325356<h2><a name="bugs">I think I found a bug in BusyBox!  What should I do?</a></h2>
    326 <p></p>
    327357
    328358<p>
     
    337367
    338368<p>
    339     The developers of BusyBox are busy people, and have only so much they can
    340     keep in their brains at a time.  As a result, bug reports and new feature
    341     patches sometimes get lost when posted to the mailing list.  To prevent
    342     your bug report from getting lost, if you find a bug in BusyBox that isn't
    343     immediately addressed, please use the <a
    344     href="http://bugs.busybox.net/">BusyBox Bug and Patch Tracking System</a>
    345     to submit a detailed explanation and we'll get to it as soon as we can.
    346 </p>
    347 
    348 <hr />
    349 <p>
     369    Bug reports and new feature patches sometimes get lost when posted to the
     370    mailing list, because the developers of BusyBox are busy people and have
     371    only so much they can keep in their brains at a time.   You can post a
     372    polite reminder after 2-3 days without offending anybody.  If that doesn't
     373    result in a solution, please use the
     374    <a href="http://bugs.busybox.net/">BusyBox Bug
     375    and Patch Tracking System</a> to submit a detailed explanation and we'll
     376    get to it as soon as we can.
     377</p>
     378
     379<p>
     380    Note that bugs entered into the bug system without being mentioned on the
     381    mailing list first may languish there for months before anyone even notices
     382    them.  We generally go through the bug system when preparing for new
     383    development releases, to see what fell through the cracks while we were
     384    off writing new features.  (It's a fast/unreliable vs slow/reliable thing.
     385    Saves retransits, but the latency sucks.)
     386</p>
     387
     388<hr />
     389<h2><a name="backporting">I'm using an ancient version from the dawn of time and something's broken.  Can you backport fixes for free?</h2>
     390
     391<p>Variants of this one get asked a lot.</p>
     392
     393<p>The purpose of the BusyBox mailing list is to develop and improve BusyBox,
     394and we're happy to respond to our users' needs.  But if you're coming to the
     395list for free tech support we're going to ask you to upgrade to a current
     396version before we try to diagnose your problem.</p>
     397
     398<p>If you're building BusyBox 0.50 with uClibc 0.9.19 and gcc 0.9.26 there's a
     399fairly large chance that whatever problem you're seeing has already been fixed.
     400To get that fix, all you have to do is upgrade to a newer version.  If you
     401don't at least _try_ that, you're wasting our time.</p>
     402
     403<p>The volunteers are happy to fix any bugs you point out in the current
     404versions because doing so helps everybody and makes the project better.  We
     405want to make the current version work for you.  But diagnosing, debugging, and
     406backporting fixes to old versions isn't something we do for free, because it
     407doesn't help anybody but you.  The cost of volunteer tech support is using a
     408reasonably current version of the project.</p>
     409
     410<p>If you don't want to upgrade, you have the complete source code and thus
     411the ability to fix it yourself, or hire a consultant to do it for you.  If you
     412got your version from a vendor who still supports the older version, they can
     413help you.  But there are limits as to what the volunteers will feel obliged to
     414do for you.</p>
     415
     416<p>As a rule of thumb, volunteers will generally answer polite questions about
     417a given version for about three years after its release before it's so old
     418we don't remember the answer off the top of our head.  And if you want us to
     419put any _effort_ into tracking it down, we want you to put in a little effort
     420of your own by confirming it's still a problem with the current version.  It's
     421also hard for us to fix a problem of yours if we can't reproduce it because
     422we don't have any systems running an environment that old.</p>
     423
     424<p>A consultant will happily set up a special environment just to reproduce
     425your problem, and you can always ask on the list if any of the developers
     426have consulting rates.</p>
     427
     428<hr />
    350429<h2><a name="init">Busybox init isn't working!</a></h2>
     430
    351431<p>
    352432    Init is the first program that runs, so it might be that no programs are
     
    381461
    382462<hr />
    383 <p>
    384463<h2><a name="sed">I can't configure busybox on my system.</a></h2>
     464
    385465<p>
    386466    Configuring Busybox depends on a recent version of sed.  Older
     
    409489
    410490<hr />
    411 <p>
    412491<h2><a name="job_control">Why do I keep getting "sh: can't access tty; job control turned off" errors?  Why doesn't Control-C work within my shell?</a></h2>
    413 <p>
    414 
     492
     493<p>
    415494    Job control will be turned off since your shell can not obtain a controlling
    416495    terminal.  This typically happens when you run your shell on /dev/console.
     
    424503</p>
    425504
     505<hr />
     506<h1>Misc. questions</h1>
     507
     508<hr />
     509<h2><a name="tz">How do I change the time zone in busybox?</a></h2>
     510
     511<p>Busybox has nothing to do with the timezone. Please consult your libc
     512documentation. (<a href='http://google.com/search?q=uclibc+glibc+timezone'>http://google.com/search?q=uclibc+glibc+timezone</a>).</p>
     513
     514<hr />
    426515<h1>Development</h1>
    427516
    428 <h2><b><a name="goals">What are the goals of busybox?</a></b></h2>
     517<hr />
     518<h2><a name="goals">What are the goals of busybox?</a></h2>
    429519
    430520<p>Busybox aims to be the smallest and simplest correct implementation of the
     
    435525take over the world.</p>
    436526
    437 <h2><b><a name="design">What is the design of busybox?</a></b></h2>
     527<hr />
     528<h2><a name="design">What is the design of busybox?</a></h2>
    438529
    439530<p>Busybox is like a swiss army knife: one thing with many functions.
     
    459550<a name="source"></a>
    460551
    461 <h2><a name="source_applets"><b>The applet directories</b></a></h2>
     552<hr />
     553<h2><a name="source_applets">The applet directories</a></h2>
    462554
    463555<p>The directory "applets" contains the busybox startup code (applets.c and
     
    466558
    467559<p>Busybox execution starts with the main() function in applets/busybox.c,
    468 which sets the global variable bb_applet_name to argv[0] and calls
    469 run_applet_by_name() in applets/applets.c.  That uses the applets[] array
     560which sets the global variable applet_name to argv[0] and calls
     561run_applet_and_exit() in applets/applets.c.  That uses the applets[] array
    470562(defined in include/busybox.h and filled out in include/applets.h) to
    471563transfer control to the appropriate APPLET_main() function (such as
     
    499591information.</p>
    500592
     593<hr />
    501594<h2><a name="source_libbb"><b>libbb</b></a></h2>
    502595
     
    512605of open(), close(), read(), and write() that test for their own failures
    513606and/or retry automatically, linked list management functions (llist.c),
    514 command line argument parsing (getopt_ulflags.c), and a whole lot more.</p>
    515 
    516 <hr />
    517 <p>
     607command line argument parsing (getopt32.c), and a whole lot more.</p>
     608
     609<hr />
    518610<h2><a name="optimize">I want to make busybox even smaller, how do I go about it?</a></h2>
     611
    519612<p>
    520613    To conserve bytes it's good to know where they're being used, and the
     
    567660        for a sepecific symbol.
    568661</p>
    569 <hr />
    570 
    571 
    572 
    573 <h2><a name="adding"><b>Adding an applet to busybox</b></a></h2>
     662
     663<hr />
     664<h2><a name="adding">Adding an applet to busybox</a></h2>
    574665
    575666<p>To add a new applet to busybox, first pick a name for the applet and
     
    612703</ul>
    613704
     705<hr />
    614706<h2><a name="standards">What standards does busybox adhere to?</a></h2>
    615707
     
    641733document where we (intentionally) fall short.</p>
    642734
     735<hr />
    643736<h2><a name="portability">Portability.</a></h2>
    644737
     
    717810something we're trying to avoid.</p>
    718811
     812<hr />
    719813<h2><a name="tips" />Programming tips and tricks.</a></h2>
    720814
     
    722816elsewhere.</p>
    723817
     818<hr />
    724819<h2><a name="tips_encrypted_passwords">Encrypted Passwords</a></h2>
    725820
     
    773868second argument to pw_encrypt(text,buffer).</p>
    774869
     870<hr />
    775871<h2><a name="tips_vfork">Fork and vfork</a></h2>
    776872
     
    851947something subtle and thus even more dangerous.)</p>
    852948
     949<hr />
    853950<h2><a name="tips_sort_read">Short reads and writes</a></h2>
    854951
     
    877974<p>So will data always be read from the far end of a pipe at the
    878975same chunk sizes it was written in?  Nope.  Don't rely on that.  For one
    879 counterexample, see <a href="http://www.faqs.org/rfcs/rfc896.html">rfc 896 
     976counterexample, see <a href="http://www.faqs.org/rfcs/rfc896.html">rfc 896
    880977for Nagle's algorithm</a>, which waits a fraction of a second or so before
    881978sending out small amounts of data through a TCP/IP connection in case more
     
    884981on their their sockets, now you know.)</p>
    885982
     983<hr />
    886984<h2><a name="tips_memory">Memory used by relocatable code, PIC, and static linking.</a></h2>
    887985
     
    9481046</blockquote>
    9491047
     1048<hr />
    9501049<h2><a name="tips_kernel_headers"></a>Including kernel headers</h2>
    9511050
     
    9851084is not a better way.</p>
    9861085
     1086<hr />
    9871087<h2><a name="who">Who are the BusyBox developers?</a></h2>
    9881088
     
    9931093<pre>
    9941094aldot     :Bernhard Fischer
    995 andersen  :Erik Andersen      <- uClibc and BuildRoot maintainer.
     1095andersen  :Erik Andersen      - uClibc and BuildRoot maintainer.
    9961096bug1      :Glenn McGrath
    9971097davidm    :David McCullough
    998 gkajmowi  :Garrett Kajmowicz  <- uClibc++ maintainer
     1098gkajmowi  :Garrett Kajmowicz  - uClibc++ maintainer
    9991099jbglaw    :Jan-Benedict Glaw
    10001100jocke     :Joakim Tjernlund
    1001 landley   :Rob Landley        <- BusyBox maintainer
     1101landley   :Rob Landley        - BusyBox maintainer
    10021102lethal    :Paul Mundt
    10031103mjn3      :Manuel Novoa III
     
    10171117
    10181118<p>The following accounts used to exist on busybox.net, but don't anymore so
    1019 I can't ask /etc/passwd for their names.  (If anybody would like to make
    1020 a stab at it...)</p>
     1119I can't ask /etc/passwd for their names.  Rob Wentworth <robwen@gmail.com>
     1120asked Google and recovered the names:</p>
    10211121
    10221122<pre>
    1023 aaronl
    1024 beppu
    1025 dwhedon
    1026 erik    : Also Erik Andersen?
    1027 gfeldman
    1028 jimg
    1029 kraai
    1030 markw
    1031 miles
    1032 proski
    1033 rjune
    1034 tausq
    1035 vodz      :Vladimir N. Oleynik
     1123aaronl   :Aaron Lehmann
     1124beppu    :John Beppu
     1125dwhedon  :David Whedon
     1126erik     :Erik Andersen
     1127gfeldman :Gennady Feldman
     1128jimg     :Jim Gleason
     1129kraai    :Matt Kraai
     1130markw    :Mark Whitley
     1131miles    :Miles Bader
     1132proski   :Pavel Roskin
     1133rjune    :Richard June
     1134tausq    :Randolph Chung
     1135vodz     :Vladimir N. Oleynik
    10361136</pre>
    10371137
Note: See TracChangeset for help on using the changeset viewer.