summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMystery Man <unknown@mandriva.org>1999-09-29 14:13:47 +0000
committerMystery Man <unknown@mandriva.org>1999-09-29 14:13:47 +0000
commit229435ccf04db72401bb5df7d3b015565952fcc5 (patch)
tree16ffcdb570219012938b771f1b9ab064114d2b5f
parentec5cc80aff948eceee5b322bc19cf3e4e65a7c3a (diff)
downloaddrakx-1_0.tar
drakx-1_0.tar.gz
drakx-1_0.tar.bz2
drakx-1_0.tar.xz
drakx-1_0.zip
This commit was manufactured by cvs2svn to create tag 'V1_0'.V1_0
-rw-r--r--.cvsignore3
-rw-r--r--Makefile39
-rw-r--r--docs/COPYING340
-rw-r--r--docs/README113
-rw-r--r--docs/object_class.fig32
-rwxr-xr-xmake_boot_img79
-rw-r--r--perl-install/.cvsignore7
-rw-r--r--perl-install/Makefile212
-rw-r--r--perl-install/c/.cvsignore6
-rw-r--r--perl-install/c/Makefile.PL15
-rwxr-xr-xperl-install/commands15
-rw-r--r--perl-install/commands.pm496
-rw-r--r--perl-install/common.pm361
-rw-r--r--perl-install/detect_devices.pm218
-rw-r--r--perl-install/devices.pm109
-rw-r--r--perl-install/fs.pm273
-rw-r--r--perl-install/fsedit.pm335
-rw-r--r--perl-install/ftp.pm54
-rw-r--r--perl-install/help.pm302
-rwxr-xr-xperl-install/install231
-rw-r--r--perl-install/install2.pm636
-rw-r--r--perl-install/install_any.pm156
-rw-r--r--perl-install/install_steps.pm307
-rw-r--r--perl-install/install_steps_interactive.pm758
-rw-r--r--perl-install/install_steps_stdio.pm73
-rw-r--r--perl-install/interactive.pm162
-rw-r--r--perl-install/keyboard.pm154
-rw-r--r--perl-install/lang.pm233
-rw-r--r--perl-install/log.pm47
-rw-r--r--perl-install/modules.pm324
-rw-r--r--perl-install/mouse.pm87
-rw-r--r--perl-install/partition_table.pm488
-rwxr-xr-xperl-install/perl2etags8
-rw-r--r--perl-install/pkgs.pm353
-rw-r--r--perl-install/resize_fat/Makefile12
-rw-r--r--perl-install/resize_fat/README8
-rw-r--r--perl-install/resize_fat/any.pm82
-rw-r--r--perl-install/resize_fat/boot_sector.pm107
-rw-r--r--perl-install/resize_fat/dir_entry.pm72
-rw-r--r--perl-install/resize_fat/directory.pm78
-rw-r--r--perl-install/resize_fat/fat.pm167
-rw-r--r--perl-install/resize_fat/info_sector.pm36
-rw-r--r--perl-install/resize_fat/io.pm74
-rw-r--r--perl-install/resize_fat/main.pm166
-rw-r--r--perl-install/run_program.pm55
-rw-r--r--perl-install/share/diskdrake.rc30
-rw-r--r--perl-install/share/po/Makefile22
-rw-r--r--perl-install/share/themes-blue.rc47
-rw-r--r--perl-install/timezone.pm80
-rw-r--r--perl-install/unused/.cvsignore1
-rw-r--r--perl-install/unused/cdrom.pm41
-rw-r--r--perl-install/unused/dns.pm64
-rw-r--r--perl-install/unused/otherinsmod.pm26
-rw-r--r--perl-install/unused/scsi.pm104
-rwxr-xr-xperl-install/verify_c14
55 files changed, 0 insertions, 8112 deletions
diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644
index e5d9d6cd3..000000000
--- a/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-kernel
-pictures
-docs
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 38b203ea6..000000000
--- a/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-BOOT_IMG = gi_hd.img gi_cdrom.img gi_network.img gi_network_ks.img gi_pcmcia.img
-BINS = install/install install/local-install install/installinit/init
-DIRS = install install/installinit mouseconfig perl-install ddcprobe
-
-
-.PHONY: $(DIRS) $(BOOT_IMG) $(FLOPPY_IMG) $(BINS) update_kernel
-
-all: $(DIRS) $(BOOT_IMG)
- mkdir /export/images 2>/dev/null ; true
- cp -f $(BOOT_IMG) /export/images
-
-clean:
- rm -rf $(BOOT_IMG) $(BINS) modules install_pcmcia_modules vmlinuz System.map
- rm -rf install/*/sbin/install install/*/sbin/init
- for i in $(DIRS); do make -C $$i clean; done
- find . -name "*~" -o -name ".#*" | xargs rm -f
-
-$(DIRS):
- make -C $@
-
-$(BOOT_IMG): $(BINS)
- if [ ! -e modules ]; then $(MAKE) update_kernel; fi
- ./make_boot_img $@ $(@:gi_%.img=%)
-
-$(BINS):
- $(MAKE) -C `dirname $@`
-
-tar: clean
- cd .. ; tar cfy gi.tar.bz2 gi
-
-update_kernel:
- cd install ; ln -sf ../kernel/cardmgr/* .
- ./update_kernel
-
-$(BOOT_IMG:%=%f): %f: %
- dd if=$< of=/dev/fd0
- xmessage "Floppy done"
-
-# mkisofs -R -b images/gi_cdrom.img -c images/.catalog /tmp/r /mnt/disk/ | cdrecord -v -eject speed=6 dev=1,0 -
diff --git a/docs/COPYING b/docs/COPYING
deleted file mode 100644
index 60549be51..000000000
--- a/docs/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/docs/README b/docs/README
deleted file mode 100644
index 4de3c0ae5..000000000
--- a/docs/README
+++ /dev/null
@@ -1,113 +0,0 @@
-Well here is a little description of what panoramix needs to work in comparison
-to the standard newt install.
-
-********************************************************************************
-* CVS **************************************************************************
-********************************************************************************
-Like all good free software, panoramix is in CVS :)
-
-You can access it using:
-% export CVSROOT=:pserver:anoncvs@linux-mandrake.com:/home/cvs/cooker
-% cvs login
-% Passwd: cvs
-% cvs checkout gi
-
-This is only read-only access. If you want more, tell me (pixel@mandrakesoft.com)
-
-Alas, all is not in CVS as a lot of things are binary files.
-For the other things, take cooker-contrib others/src/gi.tar.bz2
-
-Please note that redoing *all* the stuff is not for the faint of heart. I myself
-sometimes wonder what the whole make does :-%
-Instead, changing some .pm files is quite easy (nice interpreted language)
-
-********************************************************************************
-* FILES ************************************************************************
-********************************************************************************
-First he are the different things needed :
-
-Mandrake/base/hdlist
- table of rpm's headers.
- ! Need to be remade when Mandrake/RPMS changes !
-
-Mandrake/base/depslist
- for each packages, tell which package it depends on. Also contains the
- size for some (obscure) bloody reasons.
- ! Need to be remade when Mandrake/RPMS changes !
-
-Mandrake/base/compss
- obsoletes comps. It store packages in different categories, a bit like
- the %{GROUP} field
-
-Mandrake/base/compssList
- for each packages, it gives the appreciation for each type of user.
- used to preselect packages
- used to decide to show or hide packages.
-
-Mandrake/mdkinst
- live system used on certain installs. See ``Ramdisk or not'' below for
- more.
-
-Mandrake/base/mdkinst_stage2.gz
- for the ramdisk.
- live sytem in ext2 filesystem gzipped. See ``Ramdisk or not'' below for
- more.
-
-images/gi_*.img
- boot images to use with panoramix. Use:
- - gi_hd for hard-disk install
- - gi_cdrom for cdrom install
- - gi_network for ftp/nfs install
- - gi_pcmcia for pcmcia install (see ``PCMCIA install'' below for more)
-
-
-Some optional files :
-
-Mandrake/base/depslist.html
- html formatted depslist
-
-********************************************************************************
-* po translation files *********************************************************
-********************************************************************************
-Panoramix uses .po files for its translation. A script takes the different
-strings out of the .pm files. It generates the panoramix.pot file which contains
-all the english strings to translate.
-To add a new language, you just have to add it to lang.pm (if it's not there
-already) and put the .po in the perl-install/po directory (see ``Ramdisk or
-not'' to know if you have to regenerate the mdkinst_stage2.gz)
-
-********************************************************************************
-* PCMCIA install ***************************************************************
-********************************************************************************
-If the media you use to install is a pcmcia device, you have two choices:
-- use the gi_pcmcia boot disk
-- use another boot disk and it will ask you a supplementary disk. Give it the
-gi_pcmcia disk.
-
-
-********************************************************************************
-* Ramdisk or not ***************************************************************
-********************************************************************************
-The panoramix install is much bigger than the newt one. So the ramdisk which was
-used is getting big, and costs a lot in memory
-(eg: the mdkinst_stage2 is 14MB - 23/09/99)
-
-| | newt | panoramix
-|-------+---------+----------------------------------------------------------
-| nfs | live | live
-| ftp | ramdisk | ramdisk
-| http | ramdisk | not yet :(
-| hd | ramdisk | live if Mandrake/mdkinst/usr/bin/runinstall2 is a link,
-| | | ramdisk otherwise
-| cdrom | ramdisk | live if memory < 40MB, ramdisk otherwise
-
-When i say live, it means that the install1 stage will *mount* the
-Mandrake/mdkinst and use it that way.
-
-The ramdisk is used in place of the live in some cases. This ramdisk is filled
-with mdkinst_stage2.gz
-
-For cdrom install, the ramdisk is used to speed up things (access time is quite
-high on cdrom drives)
-
-For pcmcia, it depends on the type of install.
diff --git a/docs/object_class.fig b/docs/object_class.fig
deleted file mode 100644
index 0c9ffaff5..000000000
--- a/docs/object_class.fig
+++ /dev/null
@@ -1,32 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 2625 1200 2625 1725
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 7575 1125 7575 1650
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 7575 2100 4350 3225
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 5025 2025 4350 3225
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 2625 2100 4350 3225
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 5025 2025 6075 4125
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 2625 1200 4950 1725
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
- 7575 1125 4950 1725
-4 0 0 100 0 0 12 0.0000 4 180 1755 1800 1050 install_steps_graphical\001
-4 0 0 100 0 0 12 0.0000 4 180 1440 6900 975 install_steps_stdio\001
-4 0 0 100 0 0 12 0.0000 4 180 1140 2100 1950 interactive_gtk\001
-4 0 0 100 0 0 12 0.0000 4 180 1275 6900 1950 interactive_stdio\001
-4 0 0 100 0 0 12 0.0000 4 180 1875 4125 1950 install_steps_interactive\001
-4 0 0 100 0 0 12 0.0000 4 135 810 3975 3450 interactive\001
-4 0 0 100 0 0 12 0.0000 4 180 975 5625 4350 install_steps\001
diff --git a/make_boot_img b/make_boot_img
deleted file mode 100755
index ea4533faf..000000000
--- a/make_boot_img
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/perl
-
-@ARGV >= 2 or die "usage: $0 <image> cdrom|hd|network|network_ks|pcmcia\n";
-
-($img, $type) = @ARGV;
-
-$instdir = "install";
-$ks = "kickstart=floppy" if $type =~ s/_ks//;
-$mnt = "/mnt/disk";
-if ($>) {
- $sudo = "sudo";
- $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";
-}
-
-
-$install = $ {{
- pcmcia => "install",
- network => "install",
- cdrom => "local-install",
- hd => "local-install"
-}}{$type} or die;
-
-$0 =~ /initrd/ ?
- initrd($mnt, $img) :
- boot_img($mnt, $img);
-
-sub __ { print @_, "\n"; system(@_); }
-sub _ { __ @_; $? and die; }
-
-
-sub initrd {
- my ($mnt, $img) = @_;
- my $tmp = "$ENV{HOME}/tmp/initrd";
- my $inst1 = -d "$instdir/install1_$type" ? "install1_$type" : "install1";
-
- _ "install -s $instdir/installinit/init $instdir/$inst1/sbin/init";
- _ "install -s $instdir/$install $instdir/$inst1/sbin/install";
-
- __ "$sudo umount $tmp $mnt 2>/dev/null";
- _ "dd if=/dev/zero of=$tmp bs=1k count=2000";
- _ "echo y | mke2fs $tmp";
- _ "$sudo mount -t ext2 $tmp $mnt -o loop";
- _ "$sudo cp -a $instdir/$inst1/* $mnt";
- _ "$sudo cp -f install_${type}_modules/* $mnt/modules/" if -d "install_${type}_modules";
- _ "$sudo cp -f modules/${type}_modules.cgz $mnt/modules/modules.cgz";
- _ "$sudo cp -f modules/modules.dep $mnt/modules/";
- _ "$sudo umount $mnt";
- _ "gzip -9 -c $tmp > $img";
- _ "rm -f $tmp";
-}
-
-sub boot_img {
- my ($mnt, $img) = @_;
-
- __ "$sudo umount $mnt 2>/dev/null";
- _ "bunzip2 -c $instdir/installinit/emptyboot.img.bz2 > $img";
- _ "$sudo mount -t msdos -o umask=0 $img $mnt -o loop";
- _ "cat vmlinuz > $mnt/vmlinuz";
- initrd("${mnt}2", "$mnt/$type.rdz");
-
- output("$mnt/syslinux.cfg", "
-default linux
-prompt 0
-label linux
- kernel vmlinuz
- append $ks ramdisk=32000 initrd=$type.rdz mdkinst $type
-");
- _ "cp -f $instdir/installinit/ks.cfg $mnt 2>/dev/null" if $ks;
- _ "sync";
-}
-
-
-
-sub output {
- my $f = shift;
- local *F;
- open F, "> $f" or die "error writing to $f";
- print F join '', @_;
-}
diff --git a/perl-install/.cvsignore b/perl-install/.cvsignore
deleted file mode 100644
index 125d80f93..000000000
--- a/perl-install/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-keymaps
-consolefonts
-modparm.lst
-locales.tar.bz2
-debug.log
-auto_inst.cfg
-perl
diff --git a/perl-install/Makefile b/perl-install/Makefile
deleted file mode 100644
index 9b0d037f7..000000000
--- a/perl-install/Makefile
+++ /dev/null
@@ -1,212 +0,0 @@
-VERSION = 2.2.10-BOOT
-SUDO = sudo
-SO_FILES = c/blib/arch/auto/c/c.so
-PMS = *.pm c/*.pm resize_fat/*.pm pci_probing/*.pm commands install2 diskdrake XFdrake g_auto_install
-ROOTDEST = /export
-DEST = $(ROOTDEST)/Mandrake/mdkinst
-STAGE2 = $(ROOTDEST)/Mandrake/base/mdkinst_stage2
-BASE = $(ROOTDEST)/Mandrake/base
-DESTREP4PMS = $(DEST)/usr/bin/perl-install
-STAGE2TMP = /tmp/stage2_tmp
-PERL = perl
-LOCALFILES = $(PERL) mouseconfig ddcxinfos
-DIRS = po pci_probing
-EXCLUDE = $(LOCALFILES) boot.img keymaps consolefonts install
-RPMS = $(wildcard $(ROOTDEST)/Mandrake/RPMS/*.rpm)
-CFLAGS = -Wall
-override CFLAGS += -pipe
-
-.PHONY: all $(DIRS) tags install clean stage2 full_stage2 verify_c
-
-all: $(SO_FILES) $(DIRS)
-
-tags:
- etags -o - $(PMS) | ./perl2etags > TAGS
-
-clean:
- test ! -e c/Makefile || $(MAKE) -C c clean
- for i in $(DIRS); do $(MAKE) -C $$i clean; done
- rm -rf c/c.xs gendepslist ../diskdrake*
- find . -name "*~" -o -name "TAGS" -o -name "*.old" | xargs rm -f
-
-tar: clean
- cd .. ; tar cfy perl-install.tar.bz2 $(EXCLUDE:%=--exclude %) perl-install
-
-floppy:
- dd if=/dev/zero of=/tmp/initrd bs=1k count=2000 ; echo y | mke2fs /tmp/initrd ; mount /tmp/initrd /mnt/disk/ -o loop ; cp -a ../install1/* /mnt/disk/ ; umount /mnt/disk ; gzip -c /tmp/initrd > /tmp/initrd.img ; mcopy -o /tmp/initrd.img a:
-
-tar-diskdrake: clean pci_probing
- cd .. ; rm -rf diskdrake ; cp -af perl-install diskdrake
-
- l=`./perl2fcalls -uses -excludec diskdrake | sort | uniq | sed -e 's/::/\//' -e 's/^/diskdrake\//' -e 's/$$/.pm/'` ; \
- cd .. ; tar cfz diskdrake.tgz --exclude CVS $(patsubst %,diskdrake/%,c po diskdrake*) $$l
-
-tar-XFdrake: clean
- cd .. ; rm -rf XFdrake ; cp -af perl-install XFdrake
-
- l=`./perl2fcalls -uses -excludec -excludepci_probing::ids XFdrake | sort | uniq | sed -e 's/::/\//' -e 's/^/XFdrake\//' -e 's/$$/.pm/'` ; \
- cd .. ; tar cfz XFdrake.tgz --exclude CVS $(patsubst %,XFdrake/%,c MonitorsDB po pci_probing XFdrake*) $$l
-
-c/c.xs: c/c.xs.pm
- rm -f $@
- export C_RPM=1 ; perl $< > $@
- chmod a-w $@
-
-$(SO_FILES): c/c.xs
- test -e c/Makefile || (cd c; export C_RPM=1 ; perl Makefile.PL)
- $(MAKE) -C c
-
-$(DIRS):
- $(MAKE) -C $@
-
-test_pms: verify_c
- ./perl2fcalls -excludec install2
- perl -cw -I. -Ic -Ic/blib/arch install2
- perl -cw -I. -Ic -Ic/blib/arch install_steps_graphical.pm
-
-verify_c:
- ./verify_c $(PMS)
-
-gendepslist: %: %.cc
- $(CXX) -I/usr/include/rpm $(CFLAGS) $< -lrpm -ldb1 -lz -o $@
-
-$(BASE)/depslist: gendepslist $(RPMS)
- ./gendepslist $(BASE)/depslist $(ROOTDEST)/Mandrake/RPMS/*.rpm
-
-$(BASE)/hdlist: $(RPMS)
- $(ROOTDEST)/misc/genhdlist $(ROOTDEST)
-
-install_pms: all
- for i in `perl -ne 's/sub (\w+?)_? {.*/$$1/ and print' commands.pm`; do ln -sf commands $(DEST)/usr/bin/$$i; done
-
- install -d $(DESTREP4PMS)
- for i in $(PMS); do \
- dest=$(DESTREP4PMS)/`dirname $$i`; \
- install -d $$dest; \
- perl -ne 'print' $$i > $(DESTREP4PMS)/$$i; \
- done
-# perl -ne 's/\s*#-.*//; print unless (/^=head/ .. /^=cut/) || /use (diagnostics|vars|strict)/' $$i > $(DESTREP4PMS)/$$i; \
-# /
-
- rm $(DESTREP4PMS)/c/c.xs.pm
- mv -f $(DESTREP4PMS)/c/c.pm $(DESTREP4PMS)
-
- cp *.rc $(DESTREP4PMS)
- install -d $(DESTREP4PMS)/po
- cp po/*.po* $(DESTREP4PMS)/po
- ln -sf perl-install/install2 $(DEST)/usr/bin
- ln -sf perl-install/commands $(DEST)/usr/bin
- chmod a+x $(DESTREP4PMS)/install2
- chmod a+x $(DESTREP4PMS)/commands
- chmod a+x $(DESTREP4PMS)/XFdrake
- chmod a+x $(DESTREP4PMS)/g_auto_install
-
- cp -af */blib/arch/auto $(DESTREP4PMS)
- find $(DESTREP4PMS) -name "*.so" | xargs strip
-
-get_needed_files: $(SO_FILES)
-# export PERL_INSTALL_TEST=1 ; strace -f -e trace=file -o '| grep -v "(No such file or directory)" | sed -e "s/[^\"]*\"//" -e "s/\".*//" | grep "^/" | grep -v -e "^/tmp" -e "^/home" -e "^/proc" -e "^/var" -e "^/dev" -e "^/etc" -e "^/usr/lib/rpm" > /tmp/list ' $(PERL) -d install2 < /dev/null
- cp -f list /tmp/list
- for i in c/blib/arch/auto/c/c.so $(LOCALFILES) `cat /tmp/list` ; do \
- ldd $$i 2>/dev/null | grep -v "not a dynamic" | sed -e 's/.*=> //' -e 's/ .*//' | uniq | sort >> /tmp/list; \
- done
-
- install -d $(DEST)/etc
- install -d $(DEST)/lib
- install -d $(DEST)/bin
- install -d $(DEST)/usr/bin
- install -d $(DEST)/usr/lib
- install -d $(DEST)/usr/share
- install -d $(DEST)/usr/share/xmodmap
- install -d $(ROOTDEST)/Mandrake/base
- install -s $(LOCALFILES) $(DEST)/usr/bin
-
- for i in `cat /tmp/list`; do \
- if (echo $$i | grep -q "lib/[^/]*\.so"); then \
- install -s $$i $(DEST)/lib; \
- else \
- d=`echo $(DEST)/$$i | sed 's/\/usr\/local\//\/usr\//'`; \
- install -d `dirname $$d` && \
- if (echo $$i | grep -q "\.pm"); then \
- perl -pe '$$_ =~ /^__END__/ and exit(0);' $$i > $$d; \
- else \
- cp -f $$i $$d; \
- strip $$d 2>/dev/null || true; \
- fi; \
- fi; \
- done
-
- mv -f $(DEST)/bin/* $(DEST)/sbin/* $(DEST)/usr/bin
- cd $(DEST)/usr/bin ; mv insmod insmod_
- rmdir $(DEST)/bin $(DEST)/sbin
-
- ln -sf ash $(DEST)/usr/bin/sh
-
- tar xfy locales.tar.bz2 -C $(DEST)
-# DEST=$(DEST) perl -I. -MForMakefile -e 'locale()'
- DEST=$(DEST) perl -I. -MForMakefile -e 'xmodmap()'
-
- cp -a keymaps $(DEST)/usr/share
- cp -a consolefonts $(DEST)/usr/share
- cp modparm.lst MonitorsDB $(DEST)/usr/share
- cp logo-mandrake.xpm $(DEST)/usr/share
- cp compss compssList $(ROOTDEST)/Mandrake/base
-
- cp -f ../modules/modules.cpio.bz2 $(DEST)/lib/
- install -d $(DEST)/lib/modules
- cp -f ../modules/pristine/* $(DEST)/lib/modules
-
- ln -s install2 $(DEST)/usr/bin/runinstall2
-# echo -e "#!/bin/sh\n\nexec '/usr/bin/sh'" > $(DEST)/usr/bin/runinstall2
-# chmod a+x $(DEST)/usr/bin/runinstall2
-
-as_root:
- /bin/dd if=/dev/zero of=/tmp/initrd bs=1k count=4000
- echo y | /sbin/mke2fs /tmp/initrd
- losetup /dev/loop0 /tmp/initrd
- mount /dev/loop0 /mnt/initrd
- chmod a+w /mnt/initrd
-
-full_stage2: $(BASE)/depslist $(BASE)/hdlist
- rm -rf $(DEST)
- mkdir -p $(DEST)
- $(MAKE) get_needed_files
- $(MAKE) stage2
-
-stage2:
- $(MAKE) install_pms
-
- $(SUDO) rm -rf $(STAGE2TMP)
- install -d $(STAGE2TMP)
- $(SUDO) cp -a $(DEST)/* $(STAGE2TMP)
-
- $(SUDO) umount /mnt/stage2 ; true
- dd if=/dev/zero of=$(STAGE2) bs=1M count=14
- echo y | /sbin/mke2fs $(STAGE2)
- $(SUDO) mount -t ext2 $(STAGE2) /mnt/stage2 -o loop
-
-# hack to reduce the STAGE2 image
- rm $(STAGE2TMP)/usr/X11R6/bin/XF86_VGA16
- for i in /usr/share/locale /usr/share/keymaps /usr/share/xmodmap; do \
- name=`basename $$i` ; \
- (cd $(STAGE2TMP)/$$i ; find * | cpio -o 2>/dev/null | bzip2 > ../$$name.cpio.bz2 ; cd .. ; rm -rf $$name) \
- done
- $(SUDO) cp -a $(STAGE2TMP)/* /mnt/stage2
- $(SUDO) rm -rf $(STAGE2TMP)
-
- $(SUDO) umount $(STAGE2)
- gzip -f -9 $(STAGE2)
-# cd $(ROOTDEST) ; tar cfz /tmp/instimage-full.tgz Mandrake
-# cd $(ROOTDEST) ; tar cfz /tmp/instimage-light.tgz Mandrake/base/compss Mandrake/mdkinst/usr/[bl]*
-
- @#rm -rf /mnt/initrd/*
- @#cp -a $(DEST)/* /mnt/initrd
- @#sync
- @#dd if=/dev/loop0 | gzip -9 > /tmp/t/Mandrake/base/stage2.img
-
-# function f() { grep "$*" /usr/include/*.h /usr/include/*/*.h; }
-
-#
-# install -s install/install install1/bin/install ; install -s installinit/init install1/bin/init
-# mount /tmp/initrd /mnt/disk/ -o loop ; ; umount /mnt/disk ; gzip -c /tmp/initrd > /tmp/initrd.img ; mcopy -o /tmp/initrd.img a:
-
diff --git a/perl-install/c/.cvsignore b/perl-install/c/.cvsignore
deleted file mode 100644
index 0c6427c49..000000000
--- a/perl-install/c/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-c.c
-c.bs
-pm_to_blib
-blib
-c.xs
diff --git a/perl-install/c/Makefile.PL b/perl-install/c/Makefile.PL
deleted file mode 100644
index edbabef13..000000000
--- a/perl-install/c/Makefile.PL
+++ /dev/null
@@ -1,15 +0,0 @@
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-
-my $libs = '-L/usr/X11R6/lib -lX11 -lgdk';
-
-$libs .= ' -lrpm -ldb1 -lz' if $ENV{C_RPM};
-
-WriteMakefile(
- 'NAME' => 'c',
- 'VERSION_FROM' => 'c.pm', # finds $VERSION
- 'LIBS' => [$libs], # e.g., '-lm'
- 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
- 'INC' => '-I/usr/include/rpm -Wall `gtk-config --cflags`', # e.g., '-I/usr/include/other'
-);
diff --git a/perl-install/commands b/perl-install/commands
deleted file mode 100755
index e00f215de..000000000
--- a/perl-install/commands
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/perl
-
-use diagnostics;
-use strict;
-
-use lib qw(/usr/bin/perl-install . c c/blib/arch);
-use common qw(:file);
-use commands;
-
-my $progname = basename($0);
-
-# hack as some functions are defined by perl... so chmod -> chmod_
-&{$commands::{$progname} || $commands::{$progname . "_"} || \&err}(@ARGV), exit 0;
-
-sub err { die "$0: unknown program (unimplemented)\n"; }
diff --git a/perl-install/commands.pm b/perl-install/commands.pm
deleted file mode 100644
index 3ff726617..000000000
--- a/perl-install/commands.pm
+++ /dev/null
@@ -1,496 +0,0 @@
-package commands;
-
-use diagnostics;
-use strict;
-use vars qw($printable_chars);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :file :system :constant);
-
-#-#####################################################################################
-#- Globals
-#-#####################################################################################
-my $BUFFER_SIZE = 1024;
-
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-sub getopts {
- my $o = shift;
- my @r = map { '' } (@_ = split //, $_[0]);
- while (1) {
- local $_ = $o->[0];
- $_ && /^-/ or return @r;
- for (my $i = 0; $i < @_; $i++) { /$_[$i]/ and $r[$i] = $_[$i]; }
- shift @$o;
- }
- @r;
-}
-
-sub true { exit 0 }
-sub false { exit 1 }
-sub cat { @ARGV = @_; print while <> }
-sub which { ARG: foreach (@_) { foreach my $c (split /:/, $ENV{PATH}) { -x "$c/$_" and print("$c/$_\n"), next ARG; }}}
-sub dirname_ { print dirname(@_), "\n" }
-sub basename_ { print basename(@_), "\n" }
-sub rmdir_ { foreach (@_) { rmdir $_ or die "rmdir: can't remove $_\n" } }
-sub lsmod { print "Module Size Used by\n"; cat("/proc/modules"); }
-
-sub grep_ {
- my ($h, $v, $i) = getopts(\@_, qw(hvi));
- @_ == 0 || $h and die "usage: grep <regexp> [files...]\n";
- my $r = shift;
- $r = qr/$r/i if $i;
- @ARGV = @_; (/$r/ ? $v || print : $v && print) while <>
-}
-
-sub tr_ {
- my ($s, $c, $d) = getopts(\@_, qw(s c d));
- @_ >= 1 + (!$d || $s) or die "usage: tr [-c] [-s [-d]] <set1> <set2> [files...]\n or tr [-c] -d <set1> [files...]\n";
- my $set1 = shift;
- my $set2; !$d || $s and $set2 = shift;
- @ARGV = @_;
- eval "(tr/$set1/$set2/$s$d$c, print) while <>";
-}
-
-sub mount {
- @_ or return cat("/proc/mounts");
- my ($t) = getopts(\@_, qw(t));
- my $fs = $t && shift;
-
- @_ == 2 or die "usage: mount [-t <fs>] <device> <dir>\n",
- " (if /dev/ is left off the device name, a temporary node will be created)\n";
-
- my ($dev, $where) = @_;
- $fs ||= $where =~ /:/ ? "nfs" :
- $dev =~ /fd/ ? "vfat" : "ext2";
-
- require 'fs.pm';
- fs::mount($dev, $where, $fs, 0, 1);
-}
-
-sub umount {
- @_ == 1 or die "umount expects a single argument\n";
-
- require 'fs.pm';
- fs::umount($_[0]);
-}
-
-sub mkdir_ {
- my ($rec) = getopts(\@_, qw(p));
-
- my $mkdir; $mkdir = sub {
- my $root = dirname $_[0];
- if (-e $root) {
- -d $root or die "mkdir: error creating directory $_[0]: $root is a file and i won't delete it\n";
- } else {
- $rec or die "mkdir: $root does not exist (try option -p)\n";
- &$mkdir($root);
- }
- mkdir $_[0], 0755 or die "mkdir: error creating directory $_: $!\n";
- };
- &$mkdir($_) foreach @_;
-}
-
-
-sub mknod {
- if (@_ == 1) {
- require 'devices.pm';
- eval { devices::make($_[0]) }; $@ and die "mknod: failed to create $_[0]\n";
- } elsif (@_ == 4) {
- require 'c.pm';
- my $mode = $ {{"b" => c::S_IFBLK(), "c" => c::S_IFCHR()}}{$_[1]} or die "unknown node type $_[1]\n";
- syscall_('mknod', my $a = $_[0], $mode | 0600, makedev($_[2], $_[3])) or die "mknod failed: $!\n";
- } else { die "usage: mknod <path> [b|c] <major> <minor> or mknod <path>\n"; }
-}
-
-sub ln {
- my ($force, $soft) = getopts(\@_, qw(fs));
- @_ >= 1 or die "usage: ln [-s] [-f] <source> [<dest>]\n";
-
- my ($source, $dest) = @_;
- $dest ||= basename($source);
-
- $force and unlink $dest;
-
- ($soft ? symlink($source, $dest) : link($source, $dest)) or die "ln failed: $!\n";
-}
-
-sub rm {
- my ($rec, undef) = getopts(\@_, qw(rf));
-
- my $rm; $rm = sub {
- foreach (@_) {
- if (-d $_) {
- $rec or die "$_ is a directory\n";
- &$rm(glob_($_));
- rmdir $_ or die "can't remove directory $_: $!\n";
- } else { unlink $_ or die "rm of $_ failed: $!\n" }
- }
- };
- &$rm(@_);
-}
-
-sub chmod_ {
- @_ >= 2 or die "usage: chmod <mode> <files>\n";
-
- my $mode = shift;
- $mode =~ /^[0-7]+$/ or die "illegal mode $mode\n";
-
- foreach (@_) { chmod oct($mode), $_ or die "chmod failed $_: $!\n" }
-}
-
-sub chown_ {
- my ($rec, undef) = getopts(\@_, qw(r));
- local $_ = shift or die "usage: chown [-r] name[.group] <files>\n";
-
- my ($name, $group) = (split('\.'), $_);
-
- my ($uid, $gid) = (getpwnam($name) || $name, getgrnam($group) || $group);
-
- my $chown; $chown = sub {
- foreach (@_) {
- chown $uid, $gid, $_ or die "chown of file $_ failed: $!\n";
- -d $_ && $rec and &$chown(glob_($_));
- }
- };
- &$chown(@_);
-}
-
-sub mkswap {
- @_ == 1 or die "mkswap <device>\n";
-
- require 'swap.pm';
- swap::enable($_[0], 0);
-}
-
-sub swapon {
- @_ == 1 or die "swapon <file>\n";
-
- require 'swap.pm';
- swap::swapon($_[0]);
-}
-sub swapoff {
- @_ == 1 or die "swapoff <file>\n";
- require 'swap.pm';
- swap::swapoff($_[0]);
-}
-
-sub uncpio {
- @_ and die "uncpio reads from stdin\n";
-
-# cpioInstallArchive(gzdopen(0, "r"), NULL, 0, NULL, NULL, &fail);
-}
-
-
-sub rights {
- my $r = '-' x 9;
- my @rights = (qw(x w r x w r x w r), ['t', 0], ['s', 3], ['s', 6]);
- for (my $i = 0; $i < @rights; $i++) {
- if (vec(pack("S", $_[0]), $i, 1)) {
- my ($val, $place) = $i >= 9 ? @{$rights[$i]} : ($rights[$i], $i);
- my $old = \substr($r, 8 - $place, 1);
- $$old = ($$old eq '-' && $i >= 9) ? uc $val : $val;
- }
- }
- my @types = split //, "_pc_d_b_-_l_s";
- $types[$_[0] >> 12 & 0xf] . $r;
-}
-
-sub ls {
- my ($l , $h) = getopts(\@_, qw(lh));
- $h and die "usage: ls [-l] <files...>\n";
-
- @_ or @_ = '.';
- @_ == 1 && -d $_[0] and @_ = glob_($_[0]);
- foreach (sort @_) {
- if ($l) {
- my @s = lstat or warn("can't stat file $_\n"), next;
- formline(
-"@<<<<<<<<< @<<<<<<< @<<<<<<< @>>>>>>>> @>>>>>>>>>>>>>>> @*\n",
- rights($s[2]), getpwuid $s[4] || $s[4], getgrgid $s[5] || $s[5],
- $s[6] ? join ", ", unmakedev($s[6]) : $s[7],
- scalar localtime $s[9], -l $_ ? "$_ -> " . readlink $_ : $_);
- print $^A; $^A = '';
- } else { print "$_\n"; }
- }
-}
-sub cp {
- my ($force) = getopts(\@_, qw(f));
- @_ >= 2 or die "usage: cp [-f] <sources> <dest>\n(this cp does -Rl by default)\n";
-
- my $cp; $cp = sub {
- my $dest = pop @_;
-
- @_ or return;
- @_ == 1 || -d $dest or die "cp: copying multiple files, but last argument ($dest) is not a directory\n";
-
- foreach my $src (@_) {
- my $dest = $dest;
- -d $dest and $dest .= "/" . basename($src);
-
- if (-e $dest) {
- $force ? unlink $dest : die "file $dest already exist\n";
- }
-
- if (-d $src) {
- -d $dest or mkdir $dest, mode($src) or die "mkdir: can't create directory $dest: $!\n";
- &$cp(glob_($src), $dest);
- } elsif (-l $src) {
- symlink((readlink($src) || die "readlink failed: $!"), $dest) or die "symlink: can't create symlink $dest: $!\n";
- } else {
- local (*F, *G);
- open F, $src or die "can't open $src for reading: $!\n";
- open G, "> $dest" or $force or die "can't create $dest : $!\n";
- foreach (<F>) { print G $_ }
- chmod mode($src), $dest;
- }
- }
- };
- &$cp(@_);
-}
-
-sub ps {
- @_ and die "usage: ps\n";
- my ($pid, $cpu, $cmd);
- my ($uptime) = split ' ', first(cat_("/proc/uptime"));
- my $hertz = 100;
-
- open PS, ">&STDOUT";
- format PS_TOP =
- PID %CPU CMD
-.
- format PS =
-@>>>> @>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$pid, $cpu, $cmd
-.
- foreach $pid (sort {$a <=> $b} grep { /\d+/ } all('/proc')) {
- my @l = split(' ', cat_("/proc/$pid/stat"));
- $cpu = sprintf "%2.1f", max(0, min(99, ($l[13] + $l[14]) * 100 / $hertz / ($uptime - $l[21] / $hertz)));
- (($cmd) = cat_("/proc/$pid/cmdline")) =~ s/\0/ /g;
- $cmd ||= (split ' ', (cat_("/proc/$pid/stat"))[0])[1];
- write PS;
- }
-}
-
-
-sub dd {
- my $u = "usage: dd [-h] [-p] [if=<file>] [of=<file>] [bs=<number>] [count=<number>]\n";
- my ($help, $percent) = getopts(\@_, qw(hp));
- die $u if $help;
- my %h = (if => \*STDIN, of => \*STDOUT, bs => 512, count => undef);
- foreach (@_) {
- /(.*?)=(.*)/ && exists $h{$1} or die $u;
- $h{$1} = $2;
- }
- local (*IF, *OF); my ($tmp, $nb, $read);
- ref $h{if} eq 'GLOB' ? *IF = $h{if} : sysopen(IF, $h{if}, 0 ) || die "error: can't open file $h{if}\n";
- ref $h{of} eq 'GLOB' ? *OF = $h{of} : sysopen(OF, $h{of}, 0x41) || die "error: can't open file $h{of}\n";
-
- $h{bs} =~ /(\d+)k$/ and $h{bs} = $1 * 1024;
- $h{bs} =~ /(\d+)M$/ and $h{bs} = $1 * 1024 * 1024;
- $h{bs} =~ /(\d+)G$/ and $h{bs} = $1 * 1024 * 1024 * 1024;
-
- for ($nb = 0; !$h{count} || $nb < $h{count}; $nb++) {
- printf "\r%02.1d%%", 100 * $nb / $h{count} if $h{count} && $percent;
- $read = sysread(IF, $tmp, $h{bs}) or $h{count} ? die "error: can't read block $nb\n" : last;
- syswrite(OF, $tmp) or die "error: can't write block $nb\n";
- $read < $h{bs} and $read = 1, last;
- }
- print STDERR "\r$nb+$read records in\n";
- print STDERR "$nb+$read records out\n";
-}
-
-sub head_tail {
- my ($h, $n) = getopts(\@_, qw(hn));
- $h || @_ > 1 + bool($n) and die "usage: $0 [-h] [-n lines] [<file>]\n";
- $n = $n ? shift : 10;
- local *F; @_ ? open(F, $_[0]) || die "error: can't open file $_[0]\n" : (*F = \*STDIN);
-
- if ($0 eq 'head') {
- foreach (<F>) { $n-- or return; print }
- } else {
- @_ = (); foreach (<F>) { push @_, $_; @_ > $n and shift; }
- print @_;
- }
-}
-sub head { $0 = 'head'; &head_tail }
-sub tail { $0 = 'tail'; &head_tail }
-
-sub strings {
- my ($h, $o, $n) = getopts(\@_, qw(hon));
- $h and die "usage: strings [-o] [-n min-length] [<files>]\n";
- $n = $n ? shift : 4;
- $/ = "\0"; @ARGV = @_; my $l = 0; while (<>) {
- while (/[$printable_chars]\{$n,}/og) {
- printf "%07d ", ($l + length $') if $o;
- print "$&\n" ;
- }
- $l += length;
- } continue { $l = 0 if eof }
-}
-
-sub hexdump {
- my $i = 0; $/ = \16; @ARGV = @_; while (<>) {
- printf "%08lX ", $i; $i += 16;
- print join(" ", map({ sprintf "%02X", $_ } unpack("C*", $_)),
- ($_ =~ s/[^$printable_chars]/./og, $_)[1]), "\n";
- }
-}
-
-sub more {
- @ARGV = @_;
- require 'devices.pm';
- my $tty = devices::make('tty');
- local *IN; open IN, "<$tty" or die "can't open $tty\n";
- my $n = 0; while (<>) {
- ++$n == 25 and $n = <IN>, $n = 0;
- print
- }
-}
-
-sub pack_ {
- my $t;
- foreach (@_) {
- if (-d $_) {
- pack_(glob_($_));
- } else {
- print -s $_, "\n";
- print $_, "\n";
-
- local *F;
- open F, $_ or die "can't read file $_: $!\n";
- while (read F, $t, $BUFFER_SIZE) { print $t; }
- }
- }
-}
-
-sub unpack_ {
- my $t;
- @_ == 1 or die "give me one and only one file to unpack\n";
- local *F;
- open F, $_[0] or die "can't open file $_: $!\n";
- while (1) {
- my ($size) = chop_(scalar <F>);
- defined $size or last;
- $size =~ /^\d+$/ or die "bad format (can't find file size)\n";
- my ($filename) = chop_(scalar <F>) or die "expecting filename\n";
-
- print "$filename\n";
- my $dir = dirname($filename);
- -d $dir or mkdir_('-p', $dir);
-
- local *G;
- open G, "> $filename" or die "can't write file $filename: $!\n";
- while ($size) {
- $size -= read(F, $t, min($size, $BUFFER_SIZE)) || die "data for file $filename is missing\n";
- print G $t or die "error writing to file $filename: $!\n";
- }
- }
-}
-
-sub insmod {
- my ($h) = getopts(\@_, qw(h));
- $h || @_ == 0 and die "usage: insmod <module> [options]\n";
- my $f = local $_ = shift;
-
- require 'run_program.pm';
-
- unless (m|/|) {
- m/(.*)\.o/ and die "either give ./$_ or $1\n";
- unless (-r ($f = "/lib/modules/$_.o")) {
- $f = "/tmp/$_.o";
- run_program::run("cd /tmp ; bzip2 -cd /lib/modules.cpio.bz2 | cpio -i $_.o");
- }
- }
- -r $f or die "can't find module $_";
- run_program::run(["insmod_", "insmod"], $f, @_) or die("insmod $_ failed");
- unlink $f;
-}
-
-sub modprobe {
- my ($h) = getopts(\@_, qw(h));
- $h || @_ == 0 and die "usage: modprobe <module> [options]\n";
- my $name = shift;
- require 'modules.pm';
- modules::load_deps("/modules/modules.dep");
- modules::load($name, '', @_);
-}
-
-sub route {
- @_ == 0 or die "usage: route\nsorry, no modification handled\n";
- my ($titles, @l) = cat_("/proc/net/route");
- my @titles = split ' ', $titles;
- my %l;
- open ROUTE, ">&STDOUT";
- format ROUTE_TOP =
-Destination Gateway Mask Iface
-.
- format ROUTE =
-@<<<<<<<<<<<< @<<<<<<<<<<<< @<<<<<<<<<<<< @<<<<<<<
-$l{Destination}, $l{Gateway}, $l{Mask}, $l{Iface}
-.
- foreach (@l) {
- /^\s*$/ and next;
- @l{@titles} = split;
- $_ = join ".", reverse map { hex } unpack "a2a2a2a2", $_ foreach @l{qw(Destination Gateway Mask)};
- $l{Destination} = 'default' if $l{Destination} eq "0.0.0.0";
- $l{Gateway} = '*' if $l{Gateway} eq "0.0.0.0";
- write ROUTE;
- }
-}
-
-sub df {
- my ($h) = getopts(\@_, qw(h));
- my ($dev, $size, $free, $used, $use, $mntpoint);
- open DF, ">&STDOUT";
- format DF_TOP =
-Filesystem Size Used Avail Use Mounted on
-.
- format DF =
-@<<<<<<<<<<<<<<<< @>>>>>>> @>>>>>>> @>>>>>>> @>>>>>% @<<<<<<<<<<<<<<<<<<<<<<<<<
-$dev, $size, $used, $free, $use, $mntpoint
-.
- my %h;
- foreach (cat_("/proc/mounts"), cat_("/etc/mtab")) {
- ($dev, $mntpoint) = split;
- $h{$dev} = $mntpoint;
- }
- foreach $dev (sort keys %h) {
- $mntpoint = $h{$dev};
- my $buf = ' ' x 20000;
- syscall_('statfs', $mntpoint, $buf) or next;
- (undef, undef, $size, $free) = unpack "l7", $buf;
- $size or next;
-
- $use = int (100 * ($size - $free) / $size);
- $used = $size - $free;
- if ($h) {
- $used = int ($used / 1024) . "M";
- $size = int ($size / 1024) . "M";
- $free = int ($free / 1024) . "M";
- }
- write DF if $size;
- }
-}
-
-sub kill {
- my $signal = 15;
- @_ or die "usage: kill [-<signal>] pids\n";
- $signal = (shift, $1)[1] if $_[0] =~ /^-(.*)/;
- kill $signal, @_ or die "kill failed: $!\n";
-}
-
-sub lspci {
- require 'pci_probing/main.pm';
- print join "\n", pci_probing::main::list (), '';
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1; #
-
diff --git a/perl-install/common.pm b/perl-install/common.pm
deleted file mode 100644
index 8d6bf4307..000000000
--- a/perl-install/common.pm
+++ /dev/null
@@ -1,361 +0,0 @@
-package common;
-
-use diagnostics;
-use strict;
-use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK $printable_chars $sizeof_int $bitof_int $cancel $SECTORSIZE);
-
-@ISA = qw(Exporter);
-%EXPORT_TAGS = (
- common => [ qw(__ even odd min max sqr sum sign product bool listlength bool2text text2bool to_int to_float ikeys member divide is_empty_array_ref is_empty_hash_ref add2hash add2hash_ set_new set_add round round_up round_down first second top uniq translate untranslate warp_text formatAlaTeX) ],
- functional => [ qw(fold_left compose map_index grep_index map_each grep_each map_tab_hash mapn mapn_ difference2 before_leaving catch_cdie cdie) ],
- file => [ qw(dirname basename touch all glob_ cat_ chop_ mode) ],
- system => [ qw(sync makedev unmakedev psizeof strcpy gettimeofday syscall_ crypt_ getVarsFromSh setVarsInSh) ],
- constant => [ qw($printable_chars $sizeof_int $bitof_int $SECTORSIZE) ],
-);
-@EXPORT_OK = map { @$_ } values %EXPORT_TAGS;
-
-
-#-#####################################################################################
-#- Globals
-#-#####################################################################################
-$printable_chars = "\x20-\x7E";
-$sizeof_int = psizeof("i");
-$bitof_int = $sizeof_int * 8;
-$SECTORSIZE = 512;
-
-#-#####################################################################################
-#- Functions
-#-#####################################################################################
-
-sub fold_left(&@) {
- my $f = shift;
- local $a = shift;
- foreach $b (@_) { $a = &$f() }
- $a
-}
-
-sub _ { my $s = shift @_; sprintf translate($s), @_ }
-#-delete $main::{'_'};
-sub __ { $_[0] }
-sub even($) { $_[0] % 2 == 0 }
-sub odd($) { $_[0] % 2 == 1 }
-sub min { fold_left { $a < $b ? $a : $b } @_ }
-sub max { fold_left { $a > $b ? $a : $b } @_ }
-sub sum { fold_left { $a + $b } @_ }
-sub sqr { $_[0] * $_[0] }
-sub sign { $_[0] <=> 0 }
-sub product { fold_left { $a * $b } @_ }
-sub first { $_[0] }
-sub second { $_[1] }
-sub top { $_[$#_] }
-sub uniq { my %l; @l{@_} = (); keys %l }
-sub to_int { $_[0] =~ /(\d*)/; $1 }
-sub to_float { $_[0] =~ /(\d*(\.\d*)?)/; $1 }
-sub ikeys { my %l = @_; sort { $a <=> $b } keys %l }
-sub add2hash { my ($a, $b) = @_; while (my ($k, $v) = each %{$b || {}}) { $a->{$k} ||= $v } }
-sub add2hash_ { my ($a, $b) = @_; while (my ($k, $v) = each %{$b || {}}) { exists $a->{$k} or $a->{$k} = $v } }
-sub member { my $e = shift; foreach (@_) { $e eq $_ and return 1 } 0 }
-sub dirname { @_ == 1 or die "usage: dirname <name>\n"; local $_ = shift; s|[^/]*/*\s*$||; s|(.)/*$|$1|; $_ || '.' }
-sub basename { @_ == 1 or die "usage: basename <name>\n"; local $_ = shift; s|/*\s*$||; s|.*/||; $_ }
-sub bool { $_[0] ? 1 : 0 }
-sub listlength { scalar @_ }
-sub bool2text { $_[0] ? "true" : "false" }
-sub text2bool { my $t = lc($_[0]); $t eq "true" || $t eq "yes" ? 1 : 0 }
-sub strcpy { substr($_[0], $_[2] || 0, length $_[1]) = $_[1] }
-sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l }
-sub chop_ { map { my $l = $_; chomp $l; $l } @_ }
-sub divide { my $d = int $_[0] / $_[1]; wantarray ? ($d, $_[0] % $_[1]) : $d }
-sub round { int ($_[0] + 0.5) }
-sub round_up { my ($i, $r) = @_; $i += $r - ($i + $r - 1) % $r - 1; }
-sub round_down { my ($i, $r) = @_; $i -= $i % $r; }
-sub is_empty_array_ref { my $a = shift; !defined $a || @$a == 0 }
-sub is_empty_hash_ref { my $a = shift; !defined $a || keys(%$a) == 0 }
-sub difference2 { my %l; @l{@{$_[1]}} = (); grep { !exists $l{$_} } @{$_[0]} }
-sub intersection { my (%l, @m); @l{@{shift @_}} = (); foreach (@_) { @m = grep { exists $l{$_} } @$_; %l = (); @l{@m} = (); } keys %l }
-
-sub set_new(@) { my %l; @l{@_} = undef; { list => [ @_ ], hash => \%l } }
-sub set_add($@) { my $o = shift; foreach (@_) { exists $o->{hash}{$_} and next; push @{$o->{list}}, $_; $o->{hash}{$_} = undef } }
-
-sub sync { syscall_('sync') }
-sub gettimeofday { my $t = pack "LL"; syscall_('gettimeofday', $t, 0) or die "gettimeofday failed: $!\n"; unpack("LL", $t) }
-
-sub remove_spaces { local $_ = shift; s/^ +//; s/ +$//; $_ }
-sub mode { my @l = stat $_[0] or die "unable to get mode of file $_[0]: $!\n"; $l[2] }
-sub psizeof { length pack $_[0] }
-
-sub touch {
- my $f = shift;
- unless (-e $f) {
- local *F;
- open F, ">$f";
- }
- my $now = time;
- utime $now, $now, $f;
-}
-
-sub map_index(&@) {
- my $f = shift;
- my $v; local $::i = 0;
- map { $v = &$f($::i); $::i++; $v } @_;
-}
-sub grep_index(&@) {
- my $f = shift;
- my $v; local $::i = 0;
- grep { $v = &$f($::i); $::i++; $v } @_;
-}
-sub map_each(&%) {
- my ($f, %h) = @_;
- my @l;
- local ($::a, $::b);
- while (($::a, $::b) = each %h) { push @l, &$f($::a, $::b) }
- @l;
-}
-sub grep_each(&%) {
- my ($f, %h) = @_;
- my %l;
- local ($::a, $::b);
- while (($::a, $::b) = each %h) { $l{$::a} = $::b if &$f($::a, $::b) }
- %l;
-}
-
-#- pseudo-array-hash :)
-sub map_tab_hash(&$@) {
- my ($f, $fields, @tab_hash) = @_;
- my %hash;
- my $key = { map_index {($_, $::i + 1)} @{$fields} };
-
- for (my $i = 0; $i < @tab_hash; $i += 2) {
- my $h = [$key, @{$tab_hash[$i + 1]}];
- &$f($i, $h) if $f;
- $hash{ $tab_hash[$i] } = $h;
- }
- %hash;
-}
-
-sub smapn {
- my $f = shift;
- my $n = shift;
- my @r = ();
- for (my $i = 0; $i < $n; $i++) { push @r, &$f(map { $_->[$i] } @_); }
- @r
-}
-sub mapn(&@) {
- my $f = shift;
- smapn($f, min(map { scalar @$_ } @_), @_);
-}
-sub mapn_(&@) {
- my $f = shift;
- smapn($f, max(map { scalar @$_ } @_), @_);
-}
-
-
-sub add_f4before_leaving {
- my ($f, $b, $name) = @_;
-
- unless ($common::before_leaving::{$name}) {
- no strict 'refs';
- ${"common::before_leaving::$name"} = 1;
- ${"common::before_leaving::list"} = 1;
- }
- local *N = *{$common::before_leaving::{$name}};
- my $list = *common::before_leaving::list;
- $list->{$b}{$name} = $f;
- *N = sub {
- my $f = $list->{$_[0]}{$name} or die '';
- $name eq 'DESTROY' and delete $list->{$_[0]};
- goto $f;
- } unless defined &{*N};
-
-}
-
-#- ! the functions are not called in the order wanted, in case of multiple before_leaving :(
-sub before_leaving(&) {
- my ($f) = @_;
- my $b = bless {}, 'common::before_leaving';
- add_f4before_leaving($f, $b, 'DESTROY');
- $b;
-}
-
-sub catch_cdie(&&) {
- my ($f, $catch) = @_;
-
- local @common::cdie_catches;
- unshift @common::cdie_catches, $catch;
- &$f();
-}
-
-sub cdie($;&) {
- my ($err, $f) = @_;
- foreach (@common::cdie_catches) {
- $@ = $err;
- &{$_}(\$err) and return;
- }
- die $err;
-}
-
-sub all {
- my $d = shift;
-
- local *F;
- opendir F, $d or die "all: can't open dir $d: $!\n";
- grep { $_ ne '.' && $_ ne '..' } readdir F;
-}
-
-sub glob_ {
- my ($d, $f) = ($_[0] =~ /\*/) ? (dirname($_[0]), basename($_[0])) : ($_[0], '*');
-
- $d =~ /\*/ and die "glob_: wildcard in directory not handled ($_[0])\n";
- ($f = quotemeta $f) =~ s/\\\*/.*/g;
-
- $d =~ m|/$| or $d .= '/';
- map { $d eq './' ? $_ : "$d$_" } grep { /$f/ } all($d);
-}
-
-
-sub syscall_ {
- my $f = shift;
-
- require 'syscall.ph';
- syscall(&{$common::{"SYS_$f"}}, @_) == 0;
-}
-
-
-sub crypt_ {
- local $_ = (gettimeofday())[1] % 0x40;
- tr [\0-\x3f] [0-9a-zA-Z./];
- crypt($_[0], $_)
-}
-
-sub makedev { ($_[0] << 8) | $_[1] }
-sub unmakedev { $_[0] >> 8, $_[0] & 0xff }
-
-sub translate {
- my ($s) = @_;
- my ($lang) = substr($ENV{LC_ALL} || $ENV{LANGUAGE} || $ENV{LC_MESSAGES} || $ENV{LANG} || '', 0, 2);
-
- require 'lang.pm';
- lang::load_po ($lang) unless defined $po::I18N::{$lang}; #- the space if needed to mislead perl2fcalls (as lang is not included here)
- $po::I18N::{$lang} or return $s;
- my $l = *{$po::I18N::{$lang}};
- $l->{$s} || $s;
-}
-
-sub untranslate($@) {
- my $s = shift;
- foreach (@_) { translate($_) eq $s and return $_ }
- die "untranslate failed";
-}
-
-sub warp_text($;$) {
- my ($text, $width) = @_;
- $width ||= 80;
-
- my @l;
- foreach (split "\n", $text) {
- my $t = '';
- foreach (split /\s+/, $_) {
- if (length "$t $_" > $width) {
- push @l, $t;
- $t = $_;
- } else {
- $t = "$t $_";
- }
- }
- push @l, $t;
- }
- @l;
-}
-
-sub formatAlaTeX($) {
- my ($t, $tmp);
- foreach (split "\n", $_[0]) {
- if (/^$/) {
- $t .= ($t && "\n") . $tmp;
- $tmp = '';
- } else {
- $tmp = ($tmp && "$tmp ") . $_;
- }
- }
- $t . ($t && $tmp && "\n") . $tmp;
-}
-
-sub getVarsFromSh($) {
- my %l;
- local *F;
- open F, $_[0] or return;
- foreach (<F>) {
- my ($v, $val, $val2) =
- /^\s* # leading space
- (\w+) = # variable
- (
- "([^"]*)" # double-quoted text
- | '([^']*)' # single-quoted text
- | [^'"\s]+ # normal text
- )
- \s*$ # end of line
- /x or next;
- $l{$v} = $val2 || $val;
- }
- %l;
-}
-
-sub setVarsInSh {
- my ($file, $l, @fields) = @_;
- @fields = keys %$l unless @fields;
-
- local *F;
- open F, "> $_[0]" or die "cannot create config file $file";
- $l->{$_} and print F "$_=$l->{$_}\n" foreach @fields;
-}
-
-sub best_match {
- my ($str, @lis) = @_;
- my @words = split /\W+/, $str;
- my ($max, $res) = 0;
-
- foreach (@lis) {
- my $count = 0;
- foreach my $i (@words) {
- $count++ if /$i/i;
- }
- $max = $count, $res = $_ if $count >= $max;
- }
- $res;
-}
-
-sub bestMatchSentence {
-
- my $best = -1;
- my $bestSentence;
- my @s = split /\W+/, shift;
- foreach (@_) {
- my $count = 0;
- foreach my $e (@s) {
- $count++ if /$e/i;
- }
- $best = $count, $bestSentence = $_ if $count > $best;
- }
- $bestSentence;
-}
-
-# count the number of character that match
-sub bestMatchSentence2 {
-
- my $best = -1;
- my $bestSentence;
- my @s = split /\W+/, shift;
- foreach (@_) {
- my $count = 0;
- foreach my $e (@s) {
- $count+= length ($e) if /$e/i;
- }
- $best = $count, $bestSentence = $_ if $count > $best;
- }
- $bestSentence;
-}
-
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1; #
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm
deleted file mode 100644
index 35a85dfc5..000000000
--- a/perl-install/detect_devices.pm
+++ /dev/null
@@ -1,218 +0,0 @@
-package detect_devices;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use log;
-use common qw(:common :file);
-use devices;
-use c;
-
-#-#####################################################################################
-#- Globals
-#-#####################################################################################
-my @netdevices = map { my $l = $_; map { "$l$_" } (0..3) } qw(eth tr plip fddi);
-my $scsiDeviceAvailable;
-my $CSADeviceAvailable;
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-sub get {
- #- Detect the default BIOS boot harddrive is kind of tricky. We may have IDE,
- #- SCSI and RAID devices on the same machine. From what I see so far, the default
- #- BIOS boot harddrive will be
- #- 1. The first IDE device if IDE exists. Or
- #- 2. The first SCSI device if SCSI exists. Or
- #- 3. The first RAID device if RAID exists.
-
- map { &{$_->[0]}() ? &{$_->[1]}() : () }
- [ \&hasIDE, \&getIDE ],
- [ \&hasSCSI, \&getSCSI ],
- [ \&hasDAC960, \&getDAC960 ],
- [ \&hasCompaqSmartArray, \&getCompaqSmartArray ];
-}
-sub hds() { grep { $_->{type} eq 'hd' } get(); }
-sub cdroms() { grep { $_->{type} eq 'cdrom' } get(); }
-sub floppies() {
- (grep { tryOpen($_) } qw(fd0 fd1)),
- (grep { $_->{type} eq 'fd' } get());
-}
-
-sub hasSCSI() {
- defined $scsiDeviceAvailable and return $scsiDeviceAvailable;
- local *F;
- open F, "/proc/scsi/scsi" or log::l("failed to open /proc/scsi/scsi: $!"), return 0;
- foreach (<F>) {
- /devices: none/ and log::l("no scsi devices are available"), return $scsiDeviceAvailable = 0;
- }
- log::l("scsi devices are available");
- $scsiDeviceAvailable = 1;
-}
-sub hasIDE() { -e "/proc/ide" }
-sub hasDAC960() { 1 }
-
-sub hasCompaqSmartArray() {
- defined $CSADeviceAvailable and return $CSADeviceAvailable;
- -r "/proc/array/ida0" or log::l("failed to open /proc/array/ida0: $!"), return $CSADeviceAvailable = 0;
- log::l("Compaq Smart Array controllers available");
- $CSADeviceAvailable = 1;
-}
-
-sub getSCSI() {
- my @drives;
- my ($driveNum, $cdromNum, $tapeNum) = qw(0 0 0);
- my $err = sub { chop; die "unexpected line in /proc/scsi/scsi: $_"; };
- local $_;
-
- local *F;
- open F, "/proc/scsi/scsi" or die "failed to open /proc/scsi/scsi";
- local $_ = <F>; /^Attached devices:/ or return &$err();
- while ($_ = <F>) {
- my ($id) = /^Host:.*?Id: (\d+)/ or return &$err();
- $_ = <F>; my ($vendor, $model) = /^\s*Vendor:\s*(.*?)\s+Model:\s*(.*?)\s+Rev:/ or return &$err();
- $_ = <F>; my ($type) = /^\s*Type:\s*(.*)/ or &$err();
- my $device;
- if ($type =~ /Direct-Access/) {
- $type = 'hd';
- $device = "sd" . chr($driveNum++ + ord('a'));
- } elsif ($type =~ /Sequential-Access/) {
- $type = 'tape';
- $device = "st" . $tapeNum++;
- } elsif ($type =~ /CD-ROM/) {
- $type = 'cdrom';
- $device = "scd" . $cdromNum++;
- }
- $device and push @drives, { device => $device, type => $type, info => "$vendor $model", id => $id, bus => 0 };
- }
- @drives;
-}
-
-sub getIDE() {
- my @idi;
-
- #- Great. 2.2 kernel, things are much easier and less error prone.
- foreach my $d (sort @{[glob_('/proc/ide/hd*')]}) {
- my ($t) = chop_(cat_("$d/media"));
- my $type = $ {{disk => 'hd', cdrom => 'cdrom', tape => 'tape', floppy => 'fd'}}{$t} or next;
- my ($info) = chop_(cat_("$d/model")); $info ||= "(none)";
-
- my $num = ord (($d =~ /(.)$/)[0]) - ord 'a';
- push @idi, { type => $type, device => basename($d), info => $info, bus => $num/2, id => $num%2 };
- }
- @idi;
-}
-
-sub getCompaqSmartArray() {
- my @idi;
- my $f;
-
- for (my $i = 0; -r ($f = "/proc/array/ida$i"); $i++) {
- foreach (cat_($f)) {
- if (m|^(ida/.*?):|) {
- push @idi, { device => $1, info => "Compaq RAID logical disk", type => 'hd' };
- last;
- }
- }
- }
- @idi;
-}
-
-sub getDAC960() {
- my @idi;
-
- #- We are looking for lines of this format:DAC960#0:
- #- /dev/rd/c0d0: RAID-7, Online, 17928192 blocks, Write Thru0123456790123456789012
- foreach (syslog()) {
- my ($devicename, $info) = m|/dev/rd/(.*?): (.*?),| or next;
- push @idi, { info => $info, type => 'hd', devicename => $devicename };
- log::l("DAC960: $devicename: $info");
- }
- @idi;
-}
-
-sub net2module() {
- my @modules = map { quotemeta first(split) } cat_("/proc/modules");
- my $modules = join '|', @modules;
- my $net = join '|', @netdevices;
- my ($module, %l);
- foreach (syslog()) {
- if (/^($modules)\.c:/) {
- $module = $1;
- } elsif (/^($net):/) {
- $l{$1} = $module if $module;
- }
- }
- %l;
-}
-
-sub getNet() {
- grep { hasNetDevice($_) } @netdevices;
-}
-sub getPlip() {
- foreach (0..2) {
- hasNetDevice("plip$_") and log::l("plip$_ will be used for PLIP"), return "plip$_";
- }
- undef;
-}
-
-sub hasNet() { goto &getNet }
-sub hasPlip() { goto &getPlip }
-sub hasEthernet() { hasNetDevice("eth0"); }
-sub hasTokenRing() { hasNetDevice("tr0"); }
-sub hasNetDevice($) { c::hasNetDevice($_[0]) }
-
-sub tryOpen($) {
- local *F;
- sysopen F, devices::make($_[0]), c::O_NONBLOCK() and \*F;
-}
-
-sub tryWrite($) {
- local *F;
- sysopen F, devices::make($_[0]), 1 | c::O_NONBLOCK() and \*F;
-}
-
-sub syslog {
- -r "/tmp/syslog" and return map { /<\d+>(.*)/ } cat_("/tmp/syslog");
- `dmesg`
-}
-
-sub hasSMP {
- my $nb = grep { /^processor/ } cat_("/proc/cpuinfo");
- $nb > 1;
-}
-
-sub whatParport() {
- my @res =();
- foreach (0..3) {
- local *F;
- my $elem = {};
- open F, "/proc/parport/$_/autoprobe" or next;
- foreach (<F>) { $elem->{$1} = $2 if /(.*):(.*);/ }
- push @res, { port => "/dev/lp$_", val => $elem};
- }
- @res;
-}
-
-#-CLASS:PRINTER;
-#-MODEL:HP LaserJet 1100;
-#-MANUFACTURER:Hewlett-Packard;
-#-DESCRIPTION:HP LaserJet 1100 Printer;
-#-COMMAND SET:MLC,PCL,PJL;
-sub whatPrinter() {
- my @res = whatParport();
- grep { $_->{val}{CLASS} eq "PRINTER"} @res;
-}
-
-sub whatPrinterPort() {
- grep { tryWrite($_)} qw(/dev/lp0 /dev/lp1 /dev/lp2);
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1; #
-
diff --git a/perl-install/devices.pm b/perl-install/devices.pm
deleted file mode 100644
index b7f3a54d9..000000000
--- a/perl-install/devices.pm
+++ /dev/null
@@ -1,109 +0,0 @@
-package devices;
-
-use diagnostics;
-use strict;
-
-use common qw(:system :file);
-use run_program;
-use log;
-use c;
-
-1;
-
-
-sub size($) {
- local *F;
- sysopen F, $_[0], 0 or log::l("open $_[0]: $!"), return 0;
-
- my $valid_offset = sub { sysseek(F, $_[0], 0) && sysread(F, my $a, 1) };
-
- #- first try getting the size nicely
- my $size = 0;
- ioctl(F, c::BLKGETSIZE(), $size) and return unpack("i", $size) * $common::SECTORSIZE;
-
- #- sad it didn't work, well searching the size using the dichotomy algorithm!
- my $low = 0;
- my ($high, $mid);
-
- #- first find n where 2^n < size <= 2^n+1
- for ($high = 1; $high > 0 && &$valid_offset($high); $high *= 2) { $low = $high; }
-
- while ($low < $high - 1) {
- $mid = int ($low + $high) / 2;
- &$valid_offset($mid) ? $low : $high = $mid;
- }
- $low + 1;
-}
-
-sub make($) {
- local $_ = my $file = $_[0];
- my ($type, $major, $minor);
- my $prefix = '';
-
- if (m,^(.*/(?:dev|tmp))/(.*),) {
- $_ = $2;
- } else {
- $file = "$prefix/dev/$_";
- -e $file or $file = "$prefix/tmp/$_";
- }
- -e $file and return $file; #- assume nobody takes fun at creating files named as device
-
- if (/^sd(.)(\d{0,2})/) {
- $type = c::S_IFBLK();
- $major = 8;
- $minor = 16 * (ord($1) - ord('a')) + ($2 || 0);
- } elsif (/^hd(.)(\d{0,2})/) {
- $type = c::S_IFBLK();
- ($major, $minor) =
- @{ $ {{'a' => [3, 0], 'b' => [3, 64],
- 'c' => [22,0], 'd' => [22,64],
- 'e' => [33,0], 'f' => [33,64],
- 'g' => [34,0], 'h' => [34,64],
- }}{$1} or die "unknown device $_" };
- $minor += $2 || 0;
- } elsif (/^ram(.*)/) {
- $type = c::S_IFBLK();
- $major = 1;
- $minor = $1 eq '' ? 1 : $1;
- } elsif (m|^rd/c(\d+)d(\d+)(p(\d+))?|) {
- # dac 960 "/rd/cXdXXpX"
- $type = c::S_IFBLK();
- $major = 48 + $1;
- $minor = 8 * $2 + $4;
- } elsif (m|ida/c(\d+)d(\d+)(p(\d+))?|) {
- # Compaq Smart Array "ida/c0d0{p1}"
- $type = c::S_IFBLK();
- $major = 72 + $1;
- $minor = 16 * $2 + ($4 || 0);
- } else {
- ($type, $major, $minor) =
- @{ $ {{"aztcd" => [ c::S_IFBLK(), 29, 0 ],
- "bpcd" => [ c::S_IFBLK(), 41, 0 ],
- "cdu31a" => [ c::S_IFBLK(), 15, 0 ],
- "cdu535" => [ c::S_IFBLK(), 24, 0 ],
- "cm206cd" => [ c::S_IFBLK(), 32, 0 ],
- "tty" => [ c::S_IFCHR(), 5, 0 ],
- "fd0" => [ c::S_IFBLK(), 2, 0 ],
- "fd1" => [ c::S_IFBLK(), 2, 1 ],
- "gscd" => [ c::S_IFBLK(), 16, 0 ],
- "lp0" => [ c::S_IFCHR(), 6, 0 ],
- "lp1" => [ c::S_IFCHR(), 6, 1 ],
- "lp2" => [ c::S_IFCHR(), 6, 2 ],
- "mcd" => [ c::S_IFBLK(), 23, 0 ],
- "mcdx" => [ c::S_IFBLK(), 20, 0 ],
- "nst0" => [ c::S_IFCHR(), 9, 128 ],
- "optcd" => [ c::S_IFBLK(), 17, 0 ],
- "sbpcd" => [ c::S_IFBLK(), 25, 0 ],
- "scd0" => [ c::S_IFBLK(), 11, 0 ],
- "scd1" => [ c::S_IFBLK(), 11, 1 ],
- "sjcd" => [ c::S_IFBLK(), 18, 0 ],
- }}{$_} or die "unknown device $_" };
- }
-
- #- make a directory for this inode if needed.
- mkdir dirname($file), 0755;
-
- syscall_('mknod', $file, $type | 0600, makedev($major, $minor)) or die "mknod failed (dev $_): $!";
-
- $file;
-}
diff --git a/perl-install/fs.pm b/perl-install/fs.pm
deleted file mode 100644
index 23ef5e380..000000000
--- a/perl-install/fs.pm
+++ /dev/null
@@ -1,273 +0,0 @@
-package fs;
-
-use diagnostics;
-use strict;
-
-use common qw(:common :file :system);
-use log;
-use devices;
-use partition_table qw(:types);
-use run_program;
-use nfs;
-use swap;
-use detect_devices;
-use commands;
-use modules;
-
-1;
-
-
-sub read_fstab($) {
- my ($file) = @_;
-
- local *F;
- open F, $file or return;
-
- map {
- my ($dev, @l) = split;
- $dev =~ s,/(tmp|dev)/,,;
- { device => $dev, mntpoint => $l[0], type => $l[1], options => $l[2] }
- } <F>;
-}
-
-sub check_mounted($) {
- my ($fstab) = @_;
-
- local (*F, *G, *H);
- open F, "/etc/mtab";
- open G, "/proc/mounts";
- open H, "/proc/swaps";
- foreach (<F>, <G>, <H>) {
- foreach my $p (@$fstab) {
- /$p->{device}\s+([^\s]*)\s+/ and $p->{currentMntpoint} = $1, $p->{isMounted} = $p->{isFormatted} = 1;
- }
- }
-}
-
-sub get_mntpoints_from_fstab($) {
- my ($fstab) = @_;
-
- foreach (read_fstab('/etc/fstab')) {
- foreach my $p (@$fstab) {
- $p->{device} eq $_->{device} or next;
- $p->{mntpoint} ||= $_->{mntpoint};
- $p->{options} ||= $_->{options};
- $_->{type} ne 'auto' && $_->{type} ne type2fs($p->{type}) and
- log::l("err, fstab and partition table do not agree for $_->{device} type: " . (type2fs($p->{type}) || type2name($p->{type})) . " vs $_->{type}");
- }
- }
-}
-
-sub format_ext2($;$) {
- my ($dev, $bad_blocks) = @_;
- my @options;
-
- $dev =~ m,(rd|ida)/, and push @options, qw(-b 4096 -R stride=16); #- For RAID only.
- $bad_blocks and push @options, "-c";
-
- run_program::run("mke2fs", devices::make($dev), @options) or die _("%s formatting of %s failed", "ext2", $dev);
-}
-
-sub format_dos($;$@) {
- my ($dev, $bad_blocks, @options) = @_;
-
- run_program::run("mkdosfs", devices::make($dev), @options, $bad_blocks ? "-c" : ()) or die _("%s formatting of %s failed", "dos", $dev);
-}
-
-sub format_part($;$) {
- my ($part, $bad_blocks) = @_;
-
- $part->{isFormatted} and return;
-
- log::l("formatting device $part->{device} (type ", type2name($part->{type}), ")");
-
- if (isExt2($part)) {
- format_ext2($part->{device}, $bad_blocks);
- } elsif (isDos($part)) {
- format_dos($part->{device}, $bad_blocks);
- } elsif (isWin($part)) {
- format_dos($part->{device}, $bad_blocks, '-F', 32);
- } elsif (isSwap($part)) {
- swap::make($part->{device}, $bad_blocks);
- } else {
- die _("don't know how to format %s in type %s", $_->{device}, type2name($_->{type}));
- }
- $part->{isFormatted} = 1;
-}
-
-sub mount($$$;$) {
- my ($dev, $where, $fs, $rdonly) = @_;
- log::l("mounting $dev on $where as type $fs");
-
- -d $where or commands::mkdir_('-p', $where);
-
- if ($fs eq 'nfs') {
- log::l("calling nfs::mount($dev, $where)");
- nfs::mount($dev, $where) or die _("nfs mount failed");
- } elsif ($fs eq 'smb') {
- die "no smb yet...";
- } else {
- $dev = devices::make($dev) if $fs ne 'proc';
-
- my $flag = 0;#c::MS_MGC_VAL();
- $flag |= c::MS_RDONLY() if $rdonly;
- my $mount_opt = "";
-
- if ($fs eq 'vfat') {
- $mount_opt = "check=relaxed";
- eval { modules::load('vfat') }; #- try using vfat
- eval { modules::load('msdos') } if $@; #- otherwise msdos...
- }
-
- log::l("calling mount($dev, $where, $fs, $flag, $mount_opt)");
- syscall_('mount', $dev, $where, $fs, $flag, $mount_opt) or die _("mount failed: ") . "$!";
- }
- local *F;
- open F, ">>/etc/mtab" or return; #- fail silently, must be read-only /etc
- print F "$dev $where $fs defaults 0 0\n";
-}
-
-#- takes the mount point to umount (can also be the device)
-sub umount($) {
- my ($mntpoint) = @_;
- log::l("calling umount($mntpoint)");
- syscall_('umount', $mntpoint) or die _("error unmounting %s: %s", $mntpoint, "$!");
-
- my @mtab = cat_('/etc/mtab'); #- don't care about error, if we can't read, we won't manage to write... (and mess mtab)
- local *F;
- open F, ">/etc/mtab" or return;
- foreach (@mtab) { print F $_ unless /(^|\s)$mntpoint\s/; }
-}
-
-sub mount_part($;$) {
- my ($part, $prefix) = @_;
-
- $part->{isMounted} and return;
-
- if (isSwap($part)) {
- swap::swapon($part->{device});
- } else {
- $part->{mntpoint} or die "missing mount point";
- mount(devices::make($part->{device}), ($prefix || '') . $part->{mntpoint}, type2fs($part->{type}),
- $part->{mntreadonly} ? 1 : 0);
- }
- $part->{isMounted} = $part->{isFormatted} = 1; #- assume that if mount works, partition is formatted
-}
-
-sub umount_part($;$) {
- my ($part, $prefix) = @_;
-
- $part->{isMounted} or return;
-
- isSwap($part) ?
- swap::swapoff($part->{device}) :
- umount(($prefix || '') . ($part->{mntpoint} || devices::make($part->{device})));
- $part->{isMounted} = 0;
-}
-
-sub mount_all($;$) {
- my ($fstab, $prefix) = @_;
-
- log::l("mounting all filesystems");
-
- #- order mount by alphabetical ordre, that way / < /home < /home/httpd...
- foreach (sort { ($a->{mntpoint} || '') cmp ($b->{mntpoint} || '') } @$fstab) {
- mount_part($_, $prefix) if $_->{mntpoint};
- }
-}
-
-sub umount_all($;$) {
- my ($fstab, $prefix) = @_;
-
- log::l("unmounting all filesystems");
-
- foreach (sort { $b->{mntpoint} cmp $a->{mntpoint} } @$fstab) {
- $_->{mntpoint} and umount_part($_, $prefix);
- }
-}
-
-#- do some stuff before calling write_fstab
-sub write($$) {
- my ($prefix, $fstab) = @_;
- my @cd_drives = detect_devices::cdroms();
-
- log::l("scanning /proc/mounts for iso9660 filesystems");
- unshift @cd_drives, grep { $_->{type} eq 'iso9660' } read_fstab("/proc/mounts");
- log::l("found cdrom drive(s) " . join(', ', map { $_->{device} } @cd_drives));
-
- #- cd-rom rooted installs have the cdrom mounted on /dev/root which
- #- is not what we want to symlink to /dev/cdrom.
- my $cddev = first(grep { $_ ne 'root' } map { $_->{device} } @cd_drives);
-
- log::l("resetting /etc/mtab");
- local *F;
- open F, "> $prefix/etc/mtab" or die "error resetting $prefix/etc/mtab";
-
- if ($cddev) {
- mkdir "$prefix/mnt/cdrom", 0755 or log::l("failed to mkdir $prefix/mnt/cdrom: $!");
- symlink $cddev, "$prefix/dev/cdrom" or log::l("failed to symlink $prefix/dev/cdrom: $!");
- }
- write_fstab($fstab, $prefix, $cddev);
-
- return if $::g_auto_install;
-
- devices::make "$prefix/dev/$_->{device}" foreach grep { $_->{device} && !isNfs($_) } @$fstab;
-}
-
-sub write_fstab($;$$) {
- my ($fstab, $prefix, $cddev) = @_;
- $prefix ||= '';
-
- my @to_add =
- map {
- my ($dir, $options, $freq, $passno) = qw(/dev/ defaults 0 0);
- $options ||= $_->{options};
-
- isExt2($_) and ($freq, $passno) = (1, ($_->{mntpoint} eq '/') ? 1 : 2);
- isNfs($_) and ($dir, $options) = ('', 'ro');
-
- [ "$dir$_->{device}", $_->{mntpoint}, type2fs($_->{type}), $options, $freq, $passno ];
-
- } grep { $_->{mntpoint} && type2fs($_->{type}) } @$fstab;
-
- {
- push @to_add, [ split ' ', '/dev/fd0 /mnt/floppy auto sync,user,noauto,nosuid,nodev,unhide 0 0' ];
- push @to_add, [ split ' ', '/dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro 0 0' ] if $cddev;
- push @to_add, [ split ' ', 'none /proc proc defaults 0 0' ];
- push @to_add, [ split ' ', 'none /dev/pts devpts mode=0620 0 0' ];
- }
-
- #- get the list of devices and mntpoint
- my @new = grep { $_ ne 'none' } map { @$_[0,1] } @to_add;
- my %new; @new{@new} = undef;
-
- my @current = cat_("$prefix/etc/fstab");
-
- log::l("writing $prefix/etc/fstab");
- local *F;
- open F, "> $prefix/etc/fstab" or die "error writing $prefix/etc/fstab";
- foreach (@current) {
- my ($a, $b) = split;
- #- if we find one line of fstab containing either the same device or mntpoint, do not write it
- exists $new{$a} || exists $new{$b} and next;
- print F $_;
- }
- print F join(" ", @$_), "\n" foreach @to_add;
-}
-
-sub check_mount_all_fstab($;$) {
- my ($fstab, $prefix) = @_;
- $prefix ||= '';
-
- foreach (sort { ($a->{mntpoint} || '') cmp ($b->{mntpoint} || '') } @$fstab) {
- #- avoid unwanted mount in fstab.
- next if ($_->{device} =~ /none/ || $_->{type} =~ /nfs|smbfs|ncpfs|proc/ || $_->{options} =~ /noauto|ro/);
-
- #- TODO fsck
-
- eval { mount(devices::make($_->{device}), $prefix . $_->{mntpoint}, $_->{type}, 0); };
- if ($@) {
- log::l("unable to mount partition $_->{device} on $prefix/$_->{mntpoint}");
- }
- }
-}
diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm
deleted file mode 100644
index c4e43e148..000000000
--- a/perl-install/fsedit.pm
+++ /dev/null
@@ -1,335 +0,0 @@
-package fsedit;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :constant :functional);
-use partition_table qw(:types);
-use partition_table_raw;
-use Data::Dumper;
-use devices;
-use log;
-
-#-#####################################################################################
-#- Globals
-#-#####################################################################################
-my @suggestions = (
- { mntpoint => "/boot", minsize => 10 << 11, size => 16 << 11, type => 0x83 },
- { mntpoint => "/", minsize => 50 << 11, size => 100 << 11, type => 0x83 },
- { mntpoint => "swap", minsize => 30 << 11, size => 60 << 11, type => 0x82 },
- { mntpoint => "/usr", minsize => 200 << 11, size => 600 << 11, type => 0x83 },
- { mntpoint => "/home", minsize => 50 << 11, size => 200 << 11, type => 0x83 },
- { mntpoint => "/var", minsize => 200 << 11, size => 250 << 11, type => 0x83 },
- { mntpoint => "/tmp", minsize => 50 << 11, size => 100 << 11, type => 0x83 },
- { mntpoint => "/mnt/iso", minsize => 700 << 11, size => 800 << 11, type => 0x83 },
-);
-my @suggestions_mntpoints = qw(/mnt/dos);
-
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-sub suggestions_mntpoint($) {
- my ($hds) = @_;
- sort grep { !/swap/ && !has_mntpoint($_, $hds) }
- (@suggestions_mntpoints, map { $_->{mntpoint} } @suggestions);
-}
-
-sub hds($$) {
- my ($drives, $flags) = @_;
- my @hds;
- my $rc;
-
- foreach (@$drives) {
- my $file = devices::make($_->{device});
-
- my $hd = partition_table_raw::get_geometry($file) or die _("An error occurred while getting the geometry of block device %s: %s", $file, "$!");
- $hd = { (%$_, %$hd) };
- $hd->{file} = $file;
- $hd->{prefix} = $hd->{device};
- # for RAID arrays of format c0d0p1
- $hd->{prefix} .= "p" if $hd->{prefix} =~ m,(rd|ida)/,;
-
- eval { partition_table::read($hd, $flags->{clearall}) };
- if ($@) {
- cdie($@) unless $flags->{eraseBadPartitions};
- partition_table_raw::zero_MBR($hd);
- }
- push @hds, $hd;
- }
- [ @hds ];
-}
-
-sub get_fstab(@) {
- map { partition_table::get_normal_parts($_) } @_;
-}
-
-sub get_root($) {
- my ($fstab) = @_;
- $_->{mntpoint} eq "/" and return $_ foreach @$fstab;
- undef;
-}
-sub get_root_ { get_root([ get_fstab(@{$_[0]}) ]) }
-
-sub suggest_part($$$;$) {
- my ($hd, $part, $hds, $suggestions) = @_;
- $suggestions ||= \@suggestions;
- foreach (@$suggestions) { $_->{minsize} ||= $_->{size} }
-
- my $has_swap = grep { isSwap($_) } get_fstab(@$hds);
-
- my ($best, $second) =
- grep { $part->{size} >= $_->{minsize} }
- grep { ! has_mntpoint($_->{mntpoint}, $hds) || isSwap($_) && !$has_swap }
- @$suggestions or return;
-
- $best = $second if
- $best->{mntpoint} eq '/boot' &&
- $part->{start} + $best->{minsize} > 1024 * partition_table::cylinder_size($hd); #- if the empty slot is beyond the 1024th cylinder, no use having /boot
-
- defined $best or return; #- sorry no suggestion :(
-
- $part->{mntpoint} = $best->{mntpoint};
- $part->{type} = $best->{type};
- $part->{size} = min($part->{size}, $best->{size});
- 1;
-}
-
-
-#-sub partitionDrives {
-#-
-#- my $cmd = "/sbin/fdisk";
-#- -x $cmd or $cmd = "/usr/bin/fdisk";
-#-
-#- my $drives = findDrivesPresent() or die "You don't have any hard drives available! You probably forgot to configure a SCSI controller.";
-#-
-#- foreach (@$drives) {
-#- my $text = "/dev/" . $_->{device};
-#- $text .= " - SCSI ID " . $_->{id} if $_->{device} =~ /^sd/;
-#- $text .= " - Model " . $_->{info};
-#- $text .= " array" if $_->{device} =~ /^c.d/;
-#-
-#- #- truncate at 50 columns for now
-#- $text = substr $text, 0, 50;
-#- }
-#- #-TODO TODO
-#-}
-
-
-sub has_mntpoint($$) {
- my ($mntpoint, $hds) = @_;
- scalar grep { $mntpoint eq $_->{mntpoint} } get_fstab(@$hds);
-}
-
-#- do this before modifying $part->{mntpoint}
-#- $part->{mntpoint} should not be used here, use $mntpoint instead
-sub check_mntpoint {
- my ($mntpoint, $hd, $part, $hds) = @_;
-
- $mntpoint eq '' || isSwap($part) and return;
-
- local $_ = $mntpoint;
- m|^/| or die _("Mount points must begin with a leading /");
-#- m|(.)/$| and die "The mount point $_ is illegal.\nMount points may not end with a /";
-
- has_mntpoint($mntpoint, $hds) and die _("There is already a partition with mount point %s", $mntpoint);
-
- if ($part->{start} + $part->{size} > 1024 * partition_table::cylinder_size($hd)) {
- die "/boot ending on cylinder > 1024" if $mntpoint eq "/boot";
- die "/ ending on cylinder > 1024" if $mntpoint eq "/" && !has_mntpoint("/boot", $hds);
- }
-}
-
-sub add($$$;$) {
- my ($hd, $part, $hds, $options) = @_;
-
- isSwap($part) ?
- ($part->{mntpoint} = 'swap') :
- $options->{force} || check_mntpoint($part->{mntpoint}, $hd, $part, $hds);
-
- partition_table::add($hd, $part, $options->{primaryOrExtended});
-}
-
-sub removeFromList($$$) {
- my ($start, $end, $list) = @_;
- my $err = "error in removeFromList: removing an non-free block";
-
- for (my $i = 0; $i < @$list; $i += 2) {
- $start < $list->[$i] and die $err;
- $start > $list->[$i + 1] and next;
-
- if ($start == $list->[$i]) {
- $end > $list->[$i + 1] and die $err;
- if ($end == $list->[$i + 1]) {
- #- the free block is just the same size, removing it
- splice(@$list, 0, 2);
- } else {
- #- the free block now start just after this block
- $list->[$i] = $end;
- }
- } else {
- $end <= $list->[$i + 1] or die $err;
- if ($end < $list->[$i + 1]) {
- splice(@$list, $i + 2, 0, $end, $list->[$i + 1]);
- }
- $list->[$i + 1] = $start; #- shorten the free block
- }
- return;
- }
-}
-
-
-sub allocatePartitions($$) {
- my ($hds, $to_add) = @_;
- my %free_sectors = map { $_->{device} => [1, $_->{totalsectors} ] } @$hds; #- first sector is always occupied by the MBR
- my $remove = sub { removeFromList($_[0]{start}, $_[0]->{start} + $_[0]->{size}, $free_sectors{$_[0]->{rootDevice}}) };
- my $success = 0;
-
- foreach (get_fstab(@$hds)) { &$remove($_); }
-
- FSTAB: foreach (@$to_add) {
- my %e = %$_;
- foreach my $hd (@$hds) {
- my $v = $free_sectors{$hd->{device}};
- for (my $i = 0; $i < @$v; $i += 2) {
- my $size = $v->[$i + 1] - $v->[$i];
- $e{size} > $size and next;
-
- if ($v->[$i] + $e{size} > 1024 * partition_table::cylinder_size($hd)) {
- next if $e{mntpoint} eq "/boot" ||
- $e{mntpoint} eq "/" && !has_mntpoint("/boot", $hds);
- }
- $e{start} = $v->[$i];
- $e{rootDevice} = $hd->{device};
- partition_table::adjustStartAndEnd($hd, \%e);
- &$remove(\%e);
- partition_table::add($hd, \%e);
- $success++;
- next FSTAB;
- }
- }
- log::ld("can't allocate partition $e{mntpoint} of size $e{size}, not enough room");
- }
- $success;
-}
-
-sub auto_allocate($;$) {
- my ($hds, $suggestions) = @_;
- allocatePartitions($hds, [
- grep { ! has_mntpoint($_->{mntpoint}, $hds) }
- @{ $suggestions || \@suggestions }
- ]);
- map { partition_table::assign_device_numbers($_) } @$hds;
-}
-
-sub undo_prepare($) {
- my ($hds) = @_;
- $Data::Dumper::Purity = 1;
- foreach (@$hds) {
- my @h = @{$_}{@partition_table::fields2save};
- push @{$_->{undo}}, Data::Dumper->Dump([\@h], ['$h']);
- }
-}
-sub undo_forget($) {
- my ($hds) = @_;
- pop @{$_->{undo}} foreach @$hds;
-}
-
-sub undo($) {
- my ($hds) = @_;
- foreach (@$hds) {
- my $h; eval pop @{$_->{undo}} || next;
- @{$_}{@partition_table::fields2save} = @$h;
-
- $_->{isDirty} = $_->{needKernelReread} = 1;
- }
-}
-
-sub move {
- my ($hd, $part, $hd2, $sector2) = @_;
-
- my $part2 = { %$part };
- $part2->{start} = $sector2;
- $part2->{size} += partition_table::cylinder_size($hd2) - 1;
- partition_table::remove($hd, $part);
- {
- local ($part2->{notFormatted}, $part2->{isFormatted}); #- do not allow partition::add to change this
- partition_table::add($hd2, $part2);
- }
-
- return if $part2->{notFormatted} && !$part2->{isFormatted} || $::testing;
-
- local (*F, *G);
- sysopen F, $hd->{file}, 0 or die '';
- sysopen G, $hd2->{file}, 2 or die _("Error opening %s for writing: %s", $hd2->{file}, "$!");
-
- my $base = $part->{start};
- my $base2 = $part2->{start};
- my $step = 1 << 10;
- if ($hd eq $hd2) {
- $part->{start} == $part2->{start} and return;
- $step = min($step, abs($part->{start} - $part2->{start}));
-
- if ($part->{start} < $part2->{start}) {
- $base += $part->{size} - $step;
- $base2 += $part->{size} - $step;
- $step = -$step;
- }
- }
-
- my $f = sub {
- c::lseek_sector(fileno(F), $base, 0) or die "seeking to sector $base failed on drive $hd->{device}";
- c::lseek_sector(fileno(G), $base2, 0) or die "seeking to sector $base2 failed on drive $hd2->{device}";
-
- my $buf;
- sysread F, $buf, $SECTORSIZE * abs($_[0]) or die '';
- syswrite G, $buf;
- };
-
- for (my $i = 0; $i < $part->{size} / abs($step); $i++, $base += $step, $base2 += $step) {
- &$f($step);
- }
- if (my $v = $part->{size} % abs($step) * sign($step)) {
- $base += $v;
- $base2 += $v;
- &$f($v);
- }
-}
-
-sub rescuept($) {
- my ($hd) = @_;
- my ($ext, @hd);
-
- my $dev = devices::make($hd->{device});
- open F, "rescuept $dev|";
- foreach (<F>) {
- my ($st, $si, $id) = /start=\s*(\d+),\s*size=\s*(\d+),\s*Id=\s*(\d+)/ or next;
- my $part = { start => $st, size => $si, type => hex($id) };
- if (isExtended($part)) {
- $ext = $part;
- } else {
- push @hd, $part;
- }
- }
- close F or die "rescuept failed";
-
- partition_table_raw::zero_MBR($hd);
- foreach (@hd) {
- my $b = partition_table::verifyInside($_, $ext);
- if ($b) {
- $_->{start}--;
- $_->{size}++;
- }
- local $b->{notFormatted};
-
- partition_table::add($hd, $_, ($b ? 'Extended' : 'Primary'), 1);
- }
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1; #
diff --git a/perl-install/ftp.pm b/perl-install/ftp.pm
deleted file mode 100644
index 6e1002840..000000000
--- a/perl-install/ftp.pm
+++ /dev/null
@@ -1,54 +0,0 @@
-package ftp;
-
-use Net::FTP;
-
-use install_any;
-use log;
-
-# non-rentrant!!
-
-my $retr;
-
-1;
-
-
-sub new {
- my %options = (Passive => 1);
- $options{Firewall} = $ENV{PROXY} if $ENV{PROXY};
- $options{Port} = $ENV{PROXYPORT} if $ENV{PROXYPORT};
- my @l;
- unless ($ENV{HOST}) {
- # must be in kickstart, using URLPREFIX to find out information
- ($ENV{LOGIN}, $ENV{PASSWORD}, $ENV{HOST}, $ENV{PREFIX}) = @l =
- $ENV{URLPREFIX} =~ m|
- ://
- (?: ([^:]*) # login
- (?: :([^@]*))? # password
- @)?
- ([^/]*) # host
- /?(.*) # prefix
- |x;
- }
- unless ($ENV{LOGIN}) {
- $ENV{LOGIN} = 'anonymous';
- $ENV{PASSWORD} = 'mdkinst@test';
- }
-
- my $host = $ENV{HOST};
- if ($host !~ /^[.\d]+$/) {
- $host = join ".", unpack "C4", (gethostbyname $host)[4];
- }
-
- my $ftp = Net::FTP->new($host, %options) or die '';
- $ftp->login($ENV{LOGIN}, $ENV{PASSWORD}) or die '';
- $ftp->binary;
-
- $ftp;
-}
-
-
-sub getFile($) {
- $ftp ||= new();
- $retr->close if $retr;
- $retr = $ftp->retr($ENV{PREFIX} . "/" . install_any::relGetFile($_[0]));
-}
diff --git a/perl-install/help.pm b/perl-install/help.pm
deleted file mode 100644
index af8b15632..000000000
--- a/perl-install/help.pm
+++ /dev/null
@@ -1,302 +0,0 @@
-package help;
-
-use common qw(:common);
-
-%steps = (
-selectLanguage =>
- __("Choose preferred language for install and system usage."),
-
-selectKeyboard =>
- __("Choose on the list of keyboards, the one corresponding to yours"),
-
-selectPath =>
- __("Choose \"Installation\" if there are no previous versions of Linux
-installed, or if you wish use to multiple distributions or versions.
-
-
-Choose \"Update\" if you wish to update a previous version of Mandrake
-Linux: 5.1 (Venice), 5.2 (Leeloo), 5.3 (Festen) or 6.0 (Venus)."),
-
-selectInstallClass =>
- __("Select:
-
- - Beginner: If you have not installed Linux before, or wish to install
-the distribution elected \"Product of the year\" for 1999, click here.
-
- - Developer: If you are familiar with Linux and will be using the
-computer primarily for software development, you will find happiness
-here.
-
- - Server: If you wish to install a general purpose server, or the
-Linux distribution elected \"Distribution/Server\" for 1999, select
-this.
-
- - Expert: If you know GNU/Linux and want to perform a highly
-customized installation, this Install Class is for you."),
-
-setupSCSI =>
- __("The system did not detect a SCSI card. If you have one (or several)
-click on \"Yes\" and choose the module(s) to be tested. Otherwise,
-select \"No\".
-
-
-If you don't know if your computer has SCSI interfaces, consult the
-original documentation delivered with the computer, or if you use
-Microsoft Windows 95/98, inspect the information available via the \"Control
-panel\", \"System's icon, \"Device Manager\" tab."),
-
-partitionDisks =>
- __("At this point, hard drive partitions must be defined. (Unless you
-are overwriting a previous install of Linux and have already defined
-your hard drives partitions as desired.) This operation consists of
-logically dividing the computer's hard drive capacity into separate
-areas for use. Two common partition are: \"root\" which is the point at
-which the filesystem's directory structure starts, and \"boot\", which
-contains those files necessary to start the operating system when the
-computer is first turned on. Because the effects of this process are
-usually irreversible, partitioning can be intimidating and stressful to
-the inexperienced. DiskDrake simplifies the process so that it need not
-be. Consult the documentation and take your time before proceeding."),
-
-formatPartitions =>
- __("Any partitions that have been newly defined must be formatted for
-use. At this time, you may wish to re-format some pre-existing
-partitions to erase the data they contain. Note: it is not necessary to
-re-format pre-existing partitions, particularly if they contain files or
-data you wish to keep. Typically retained are: /home and /usr/local."),
-
-choosePackages =>
- __("You may now select the packages you wish to install.
-
-
-Please note that some packages require the installation of others. These
-are referred to as package dependencies. The packages you select, and
-the packages they require will automatically be added to the
-installation configuration. It is impossible to install a package
-without installing all of its dependencies.
-
-
-Information on each category and specific package is available in the
-area titled \"Info\". This is located above the buttons: [confirmation]
-[selection] [unselection]."),
-
-doInstallStep =>
- __("The packages selected are now being installed. This operation
-should only take a few minutes."),
-
-configureMouse =>
- __("Help"),
-
-configureNetwork =>
- __("Help"),
-
-configureTimezone =>
- __("Help"),
-
-configureServices =>
- __("Help"),
-
-configurePrinter =>
- __("Help"),
-
-setRootPassword =>
- __("An administrator password for your Linux system must now be
-assigned. The password must be entered twice to verify that both
-password entries are identical.
-
-
-Choose this password carefully. Only persons with access to an
-administrator account can maintain and administer the system.
-Alternatively, unauthorized use of an administrator account can be
-extremely dangerous to the integrity of the system, the data upon it,
-and other systems with which it is interfaced. The password should be a
-mixture of alphanumeric characters and a least 8 characters long. It
-should never be written down. Do not make the password too long or
-complicated that it will be difficult to remember.
-
-
-When you login as Administrator, at \"login\" type \"root\" and at
-\"password\", type the password that was created here."),
-
-addUser =>
- __("You can now authorize one or more people to use your Linux
-system. Each user account will have their own customizable environment.
-
-
-It is very important that you create a regular user account, even if
-there will only be one principle user of the system. The administrative
-\"root\" account should not be used for day to day operation of the
-computer. It is a security risk. The use of a regular user account
-protects you and the system from yourself. The root account should only
-be used for administrative and maintenance tasks that can not be
-accomplished from a regular user account."),
-
-createBootdisk =>
- __("Help"),
-
-setupBootloader =>
- __("You need to indicate where you wish
-to place the information required to boot to Linux.
-
-
-Unless you know exactly what you are doing, choose \"First sector of
-drive\"."),
-
-configureX =>
- __("It is now time to configure the video card and monitor
-configuration for the X Window Graphic User Interface (GUI). First
-select your monitor. Next, you may test the configuration and change
-your selections if necessary."),
-exitInstall =>
- __("Help"),
-);
-
-#- ################################################################################
-%steps_long = (
-selectLanguage =>
- __("Choose preferred language for install and system usage."),
-
-selectKeyboard =>
- __("Choose on the list of keyboards, the one corresponding to yours"),
-
-selectPath =>
- __("Choose \"Installation\" if there are no previous versions of Linux
-installed, or if you wish use to multiple distributions or versions.
-
-
-Choose \"Update\" if you wish to update a previous version of Mandrake
-Linux: 5.1 (Venice), 5.2 (Leeloo), 5.3 (Festen) or 6.0 (Venus)."),
-
-selectInstallClass =>
- __("Select:
-
- - Beginner: If you have not installed Linux before, or wish to install
-the distribution elected \"Product of the year\" for 1999, click here.
-
- - Developer: If you are familiar with Linux and will be using the
-computer primarily for software development, you will find happiness
-here.
-
- - Server: If you wish to install a general purpose server, or the
-Linux distribution elected \"Distribution/Server\" for 1999, select
-this.
-
- - Expert: If you know GNU/Linux and want to perform a highly
-customized installation, this Install Class is for you."),
-
-setupSCSI =>
- __("The system did not detect a SCSI card. If you have one (or several)
-click on \"Yes\" and choose the module(s) to be tested. Otherwise,
-select \"No\".
-
-
-If you don't know if your computer has SCSI interfaces, consult the
-original documentation delivered with the computer, or if you use
-Microsoft Windows 95/98, inspect the information available via the \"Control
-panel\", \"System's icon, \"Device Manager\" tab."),
-
-partitionDisks =>
- __("At this point, hard drive partitions must be defined. (Unless you
-are overwriting a previous install of Linux and have already defined
-your hard drives partitions as desired.) This operation consists of
-logically dividing the computer's hard drive capacity into separate
-areas for use. Two common partition are: \"root\" which is the point at
-which the filesystem's directory structure starts, and \"boot\", which
-contains those files necessary to start the operating system when the
-computer is first turned on. Because the effects of this process are
-usually irreversible, partitioning can be intimidating and stressful to
-the inexperienced. DiskDrake simplifies the process so that it need not
-be. Consult the documentation and take your time before proceeding."),
-
-formatPartitions =>
- __("Any partitions that have been newly defined must be formatted for
-use. At this time, you may wish to re-format some pre-existing
-partitions to erase the data they contain. Note: it is not necessary to
-re-format pre-existing partitions, particularly if they contain files or
-data you wish to keep. Typically retained are: /home and /usr/local."),
-
-choosePackages =>
- __("You may now select the packages you wish to install.
-
-
-Please note that some packages require the installation of others. These
-are referred to as package dependencies. The packages you select, and
-the packages they require will automatically be added to the
-installation configuration. It is impossible to install a package
-without installing all of its dependencies.
-
-
-Information on each category and specific package is available in the
-area titled \"Info\". This is located above the buttons: [confirmation]
-[selection] [unselection]."),
-
-doInstallStep =>
- __("The packages selected are now being installed. This operation
-should only take a few minutes."),
-
-configureMouse =>
- __("Help"),
-
-configureNetwork =>
- __("Help"),
-
-configureTimezone =>
- __("Help"),
-
-configureServices =>
- __("Help"),
-
-configurePrinter =>
- __("Help"),
-
-setRootPassword =>
- __("An administrator password for your Linux system must now be
-assigned. The password must be entered twice to verify that both
-password entries are identical.
-
-
-Choose this password carefully. Only persons with access to an
-administrator account can maintain and administer the system.
-Alternatively, unauthorized use of an administrator account can be
-extremely dangerous to the integrity of the system, the data upon it,
-and other systems with which it is interfaced. The password should be a
-mixture of alphanumeric characters and a least 8 characters long. It
-should never be written down. Do not make the password too long or
-complicated that it will be difficult to remember.
-
-
-When you login as Administrator, at \"login\" type \"root\" and at
-\"password\", type the password that was created here."),
-
-addUser =>
- __("You can now authorize one or more people to use your Linux
-system. Each user account will have their own customizable environment.
-
-
-It is very important that you create a regular user account, even if
-there will only be one principle user of the system. The administrative
-\"root\" account should not be used for day to day operation of the
-computer. It is a security risk. The use of a regular user account
-protects you and the system from yourself. The root account should only
-be used for administrative and maintenance tasks that can not be
-accomplished from a regular user account."),
-
-createBootdisk =>
- __("Help"),
-
-setupBootloader =>
- __("You need to indicate where you wish
-to place the information required to boot to Linux.
-
-
-Unless you know exactly what you are doing, choose \"First sector of
-drive\"."),
-
-configureX =>
- __("It is now time to configure the video card and monitor
-configuration for the X Window Graphic User Interface (GUI). First
-select your monitor. Next, you may test the configuration and change
-your selections if necessary."),
-exitInstall =>
- __("Help"),
-);
diff --git a/perl-install/install2 b/perl-install/install2
deleted file mode 100755
index b9459d527..000000000
--- a/perl-install/install2
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/perl
-
-#- Mandrake Graphic Install
-#- Copyright (C) 1999 MandrakeSoft (pixel@linux-mandrake.com)
-#-
-#- This program is free software; you can redistribute it and/or modify
-#- it under the terms of the GNU General Public License as published by
-#- the Free Software Foundation; either version 2, or (at your option)
-#- any later version.
-#-
-#- This program is distributed in the hope that it will be useful,
-#- but WITHOUT ANY WARRANTY; without even the implied warranty of
-#- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#- GNU General Public License for more details.
-#-
-#- You should have received a copy of the GNU General Public License
-#- along with this program; if not, write to the Free Software
-#- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use diagnostics;
-use strict;
-
-use lib qw(/usr/bin/perl-install . c c/blib/arch);
-use install2;
-
-$::testing = $ENV{PERL_INSTALL_TEST};
-$::isStandalone = 0;
-
-install2::main(@ARGV);
-
-exec "true";
diff --git a/perl-install/install2.pm b/perl-install/install2.pm
deleted file mode 100644
index b18895f3e..000000000
--- a/perl-install/install2.pm
+++ /dev/null
@@ -1,636 +0,0 @@
-package install2;
-
-use diagnostics;
-use strict;
-use Data::Dumper;
-
-use vars qw($o);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :file :system :functional);
-use install_any qw(:all);
-use log;
-use help;
-use network;
-use lang;
-use keyboard;
-use lilo;
-use mouse;
-use fs;
-use timezone;
-use fsedit;
-use devices;
-use partition_table qw(:types);
-use pkgs;
-use printer;
-use modules;
-use detect_devices;
-use modparm;
-use install_steps_graphical;
-use run_program;
-
-#-######################################################################################
-#- Steps table
-#-######################################################################################
-my @installStepsFields = qw(text redoable onError needs entered reachable toBeDone help next done);
-my @installSteps = (
- selectLanguage => [ __("Choose your language"), 1, 1 ],
- selectInstallClass => [ __("Select installation class"), 1, 1 ],
- setupSCSI => [ __("Setup SCSI"), 1, 0 ],
- selectPath => [ __("Choose install or upgrade"), 0, 0, "selectInstallClass" ],
- selectMouse => [ __("Configure mouse"), 1, 1 ],
- selectKeyboard => [ __("Choose your keyboard"), 1, 1 ],
- partitionDisks => [ __("Setup filesystems"), 1, 0 ],
- formatPartitions => [ __("Format partitions"), 1, -1, "partitionDisks" ],
- choosePackages => [ __("Choose packages to install"), 1, 1, "selectInstallClass" ],
- doInstallStep => [ __("Install system"), 1, -1, ["formatPartitions", "selectPath"] ],
- configureNetwork => [ __("Configure networking"), 1, 1, "formatPartitions" ],
- configureTimezone => [ __("Configure timezone"), 1, 1, "doInstallStep" ],
-#- configureServices => [ __("Configure services"), 0, 0 ],
- configurePrinter => [ __("Configure printer"), 1, 0, "doInstallStep" ],
- setRootPassword => [ __("Set root password"), 1, 1, "formatPartitions" ],
- addUser => [ __("Add a user"), 1, 1, "doInstallStep" ],
- createBootdisk => [ __("Create bootdisk"), 1, 0, "doInstallStep" ],
- setupBootloader => [ __("Install bootloader"), 1, 1, "doInstallStep" ],
- configureX => [ __("Configure X"), 1, 0, "formatPartitions" ],
- exitInstall => [ __("Exit install"), 0, 0 ],
-);
-
-my (%installSteps, %upgradeSteps, @orderedInstallSteps, @orderedUpgradeSteps);
-
-for (my $i = 0; $i < @installSteps; $i += 2) {
- my %h; @h{@installStepsFields} = @{ $installSteps[$i + 1] };
- $h{help} = $help::steps{$installSteps[$i]} || __("Help");
- $h{next} = $installSteps[$i + 2];
- $h{entered} = 0;
- $h{onError} = $installSteps[$i + 2 * $h{onError}];
- $installSteps{ $installSteps[$i] } = \%h;
- push @orderedInstallSteps, $installSteps[$i];
-}
-
-$installSteps{first} = $installSteps[0];
-
-#-#####################################################################################
-#-INTERN CONSTANT
-#-#####################################################################################
-my @install_classes = (__("beginner"), __("developer"), __("server"), __("expert"));
-
-#-#####################################################################################
-#-Default value
-#-#####################################################################################
-#- partition layout
-my %suggestedPartitions = (
- beginner => [
- { mntpoint => "/boot", size => 16 << 11, type => 0x83 },
- { mntpoint => "swap", size => 128 << 11, type => 0x82 },
- { mntpoint => "/", size => 700 << 11, type => 0x83 },
- { mntpoint => "/home", size => 300 << 11, type => 0x83 },
- ],
- developer => [
- { mntpoint => "/boot", size => 16 << 11, type => 0x83 },
- { mntpoint => "swap", size => 128 << 11, type => 0x82 },
- { mntpoint => "/", size => 200 << 11, type => 0x83 },
- { mntpoint => "/usr", size => 600 << 11, type => 0x83 },
- { mntpoint => "/home", size => 500 << 11, type => 0x83 },
- ],
- server => [
- { mntpoint => "/boot", size => 16 << 11, type => 0x83 },
- { mntpoint => "swap", size => 512 << 11, type => 0x82 },
- { mntpoint => "/", size => 200 << 11, type => 0x83 },
- { mntpoint => "/usr", size => 600 << 11, type => 0x83 },
- { mntpoint => "/var", size => 600 << 11, type => 0x83 },
- { mntpoint => "/home", size => 500 << 11, type => 0x83 },
- ],
- expert => [
- { mntpoint => "/", size => 200 << 11, type => 0x83 },
- ],
-);
-
-#-#######################################################################################
-#-$O
-#-the big struct which contain, well everything (globals + the interactive methods ...)
-#-if you want to do a kickstart file, you just have to add all the required fields (see for example
-#-the variable $default)
-#-#######################################################################################
-$o = $::o = {
-# bootloader => { linear => 0, message => 1, keytable => 1, timeout => 5, restricted => 0 },
- autoSCSI => 0,
- mkbootdisk => 1, #- no mkbootdisk if 0 or undef, find a floppy with 1
-#- packages => [ qw() ],
- partitioning => { clearall => 0, eraseBadPartitions => 0, auto_allocate => 0, autoformat => 0 },
-#- partitions => [
-#- { mntpoint => "/boot", size => 16 << 11, type => 0x83 },
-#- { mntpoint => "/", size => 256 << 11, type => 0x83 },
-#- { mntpoint => "/usr", size => 512 << 11, type => 0x83, growable => 1 },
-#- { mntpoint => "/var", size => 256 << 11, type => 0x83 },
-#- { mntpoint => "/home", size => 512 << 11, type => 0x83, growable => 1 },
-#- { mntpoint => "swap", size => 64 << 11, type => 0x82 }
-#- { mntpoint => "/boot", size => 16 << 11, type => 0x83 },
-#- { mntpoint => "/", size => 300 << 11, type => 0x83 },
-#- { mntpoint => "swap", size => 64 << 11, type => 0x82 },
-#- { mntpoint => "/usr", size => 400 << 11, type => 0x83, growable => 1 },
-#- ],
- shells => [ map { "/bin/$_" } qw(bash tcsh zsh ash ksh) ],
- lang => 'en',
- isUpgrade => 0,
- installClass => "beginner",
-
- timezone => {
-#- timezone => "Europe/Paris",
-#- GMT => 1,
- },
- printer => {
- want => 0,
- complete => 0,
- str_type => $printer::printer_type_default,
- QUEUE => "lp",
- SPOOLDIR => "/var/spool/lpd/lp",
- DBENTRY => "DeskJet670",
- PAPERSIZE => "legal",
- CRLF => 0,
-
- DEVICE => "/dev/lp",
-
- REMOTEHOST => "",
- REMOTEQUEUE => "",
-
- NCPHOST => "printerservername",
- NCPQUEUE => "queuename",
- NCPUSER => "user",
- NCPPASSWD => "pass",
-
- SMBHOST => "hostname",
- SMBHOSTIP => "1.2.3.4",
- SMBSHARE => "printername",
- SMBUSER => "user",
- SMBPASSWD => "passowrd",
- SMBWORKGROUP => "AS3",
- },
-#- superuser => { password => 'a', shell => '/bin/bash', realname => 'God' },
-#- user => { name => 'foo', password => 'bar', home => '/home/foo', shell => '/bin/bash', realname => 'really, it is foo' },
-
-#- keyboard => 'de',
-#- display => "192.168.1.9:0",
- steps => \%installSteps,
- orderedSteps => \@orderedInstallSteps,
-
- base => [ qw(basesystem initscripts console-tools mkbootdisk anacron rhs-hwdiag utempter ldconfig chkconfig ntsysv mktemp setup filesystem SysVinit bdflush crontabs dev e2fsprogs etcskel fileutils findutils getty_ps grep groff gzip hdparm info initscripts isapnptools kbdconfig kernel less ldconfig lilo logrotate losetup man mkinitrd mingetty modutils mount net-tools passwd procmail procps psmisc mandrake-release rootfiles rpm sash sed setconsole setserial shadow-utils sh-utils slocate stat sysklogd tar termcap textutils time timeconfig tmpwatch util-linux vim-minimal vixie-cron which cpio perl) ],
-#- for the list of fields available for user and superuser, see @etc_pass_fields in install_steps.pm
-#- intf => [ { DEVICE => "eth0", IPADDR => '1.2.3.4', NETMASK => '255.255.255.128' } ],
-
-#-step : the current one
-#-prefix
-#-mouse
-#-keyboard
-#-netc
-#-autoSCSI drives hds fstab
-#-methods
-#-packages compss
-#-printer haveone entry(cf printer.pm)
-
-};
-
-#-######################################################################################
-#- Steps Functions
-#- each step function are called with two arguments : clicked(because if you are a
-#- beginner you can force the the step) and the entered number
-#-######################################################################################
-
-#------------------------------------------------------------------------------
-sub selectLanguage {
- $o->selectLanguage;
-
- addToBeDone {
- lang::write($o->{prefix});
- keyboard::write($o->{prefix}, $o->{keyboard});
- } 'doInstallStep' unless $::g_auto_install;
-}
-
-#------------------------------------------------------------------------------
-sub selectMouse {
- my ($clicked) = $_[0];
-
- $o->{mouse} or $o->{mouse} = {};
- add2hash($o->{mouse}, { mouse::read($o->{prefix}) }) if $o->{isUpgrade} && !$clicked;
-
- $o->selectMouse($clicked);
- addToBeDone { mouse::write($o->{prefix}, $o->{mouse}); } 'formatPartitions';
-}
-
-#------------------------------------------------------------------------------
-sub selectKeyboard {
- my ($clicked) = $_[0];
-
- return unless $o->{isUpgrade} || !$::beginner || $clicked;
-
- $o->{keyboard} = (keyboard::read($o->{prefix}))[0] if $o->{isUpgrade} && !$clicked && !$o->{keyboard};
- $o->selectKeyboard if !$::beginner || $clicked;
-
- #- if we go back to the selectKeyboard, you must rewrite
- addToBeDone {
- keyboard::write($o->{prefix}, $o->{keyboard});
- } 'doInstallStep' unless $::g_auto_install;
-}
-
-#------------------------------------------------------------------------------
-sub selectPath {
- $o->selectPath;
-
- if ($o->{isUpgrade}) {
- #- try to find the partition where the system is installed if beginner
- #- else ask the user the right partition, and test it after.
- unless ($o->{hds}) {
- $o->{drives} = [ detect_devices::hds() ];
- $o->{hds} = catch_cdie { fsedit::hds($o->{drives}, $o->{partitioning}) }
- sub { 1; };
-
- unless (@{$o->{hds}} > 0) {
- $o->setupSCSI if $o->{autoSCSI}; #- ask for an unautodetected scsi card
- }
- }
-
- my @normal_partitions = fsedit::get_fstab(@{$o->{hds}});
-
- fs::check_mounted([@normal_partitions]);
-
- #- get all ext2 partition that may be root partition.
- my %partitions_lookup;
- my @partitions = map {
- $partitions_lookup{$_->{device}} = $_;
- type2fs($_->{type}) eq 'ext2' ? $_->{device} : (); } @normal_partitions;
-
- my $root;
- my $root_partition;
- my $selected_partition;
- do {
- if ($selected_partition->{mntpoint} && !$selected_partition->{currentMntpoint}) {
- $o->ask_warn(_("Information"), "$selected_partition->{device}" . _(" : This is not a root partition, try again."))
- unless $::beginner;
- log::l("umounting non root partition $selected_partition->{device}");
- eval { fs::umount_part($selected_partition); };
- $selected_partition->{mntpoint} = '';
- $selected_partition->{mntreadonly} = undef;
- }
-
- $root_partition = $::beginner ? $partitions[0] : $o->selectRootPartition(@partitions);
- $selected_partition = $partitions_lookup{$root_partition};
-
- unless ($root = $selected_partition->{currentMntpoint}) {
- $selected_partition->{mntpoint} = $root = $o->{prefix};
- $selected_partition->{mntreadonly} = 1;
- log::l("trying to mount root partition $root_partition");
- eval { fs::mount_part($selected_partition); };
- }
-
- #- avoid testing twice a partition.
- for my $i (0..$#partitions) {
- splice @partitions, $i, 1 if $partitions[$i] eq $root_partition;
- }
- } until $root && -d "$root/etc/sysconfig" && -r "$root/etc/fstab" || !(scalar @partitions);
-
-
- if ($root && -d "$root/etc/sysconfig" && -r "$root/etc/fstab") {
- $o->ask_warn(_("Information"), _("Found root partition : ") . $root_partition);
- $o->{prefix} = $root;
- $o->{fstab} = \@normal_partitions;
-
- #- test if the partition has to be fschecked and remounted rw.
- if ($selected_partition->{mntpoint} && !$selected_partition->{currentMntpoint}) {
- my @fstab = fs::read_fstab("$root/etc/fstab");
-
- eval { fs::umount_part($selected_partition); };
- $selected_partition->{mntpoint} = '';
- $selected_partition->{mntreadonly} = undef;
-
- foreach (@fstab) {
- if ($selected_partition = $partitions_lookup{$_->{device}}) {
- $selected_partition->{mntpoint} = $_->{mntpoint};
- }
- }
- #- TODO fsck, create check_mount_all ?
- fs::mount_all([ grep { isExt2($_) || isSwap($_) } @{$o->{fstab}} ], $o->{prefix});
- }
- } else {
- $o->ask_warn(_("Error"), _("No root partition found"));
- }
- }
-}
-
-#------------------------------------------------------------------------------
-sub selectInstallClass {
- $o->selectInstallClass(@install_classes);
-
- $::expert = $o->{installClass} eq "expert";
- $::beginner = $o->{installClass} eq "beginner";
- $o->{partitions} ||= $suggestedPartitions{$o->{installClass}};
- $o->{partitioning}{auto_allocate} ||= -1 if $::beginner;
-
- $o->setPackages(\@install_classes)
- if $o->{steps}{choosePackages}{entered} >= 1 &&
- !$o->{steps}{doInstallStep}{done};
-}
-
-#------------------------------------------------------------------------------
-sub setupSCSI {
- my ($clicked) = $_[0];
- $o->{autoSCSI} ||= $::beginner;
-
- $o->setupSCSI($o->{autoSCSI} && !$clicked, $clicked);
-}
-
-#------------------------------------------------------------------------------
-sub partitionDisks {
- return if ($o->{isUpgrade});
-
- unless ($o->{hds}) {
- $o->{drives} = [ detect_devices::hds() ];
- $o->{hds} = catch_cdie { fsedit::hds($o->{drives}, $o->{partitioning}) }
- sub {
- $o->ask_warn(_("Error"),
-_("I can't read your partition table, it's too corrupted for me :(
-I'll try to go on blanking bad partitions"));
- $o->{partitioning}{auto_allocate} = 0;
- 1;
- };
-
- unless (@{$o->{hds}} > 0) {
- $o->setupSCSI if $o->{autoSCSI}; #- ask for an unautodetected scsi card
- }
- }
- if (@{$o->{hds}} == 0) { #- no way
- die _("An error has occurred - no valid devices were found on which to create new filesystems. Please check your hardware for the cause of this problem");
- }
-
- $o->{partitioning}{auto_allocate} = 0
- if $o->{partitioning}{auto_allocate} == -1 && fsedit::get_fstab(@{$o->{hds}}) >= 4;
-
- eval { fsedit::auto_allocate($o->{hds}, $o->{partitions}) } if
- $o->{partitioning}{auto_allocate} && ($o->{partitioning}{auto_allocate} != -1 || $::beginner);
-
- if ($o->{partitioning}{auto_allocated} = ($::beginner && fsedit::get_root_($o->{hds}) && $_[1] == 1)) {
- install_steps::doPartitionDisks($o, $o->{hds});
- } else {
- $o->doPartitionDisks($o->{hds});
- }
-
- unless ($::testing) {
- $o->rebootNeeded foreach grep { $_->{rebootNeeded} } @{$o->{hds}};
- }
-
- $o->{fstab} = [ fsedit::get_fstab(@{$o->{hds}}) ];
-
- fsedit::get_root($o->{fstab}) or die _("partitioning failed: no root filesystem");
-}
-
-sub formatPartitions {
- return if ($o->{isUpgrade});
-
- $o->choosePartitionsToFormat($o->{fstab});
-
- unless ($::testing) {
- $o->formatPartitions(@{$o->{fstab}});
- fs::mount_all([ grep { isExt2($_) || isSwap($_) } @{$o->{fstab}} ], $o->{prefix});
- }
- mkdir "$o->{prefix}/$_", 0755 foreach
- qw(dev etc etc/sysconfig etc/sysconfig/console etc/sysconfig/network-scripts
- etc/sysconfig/network-scripts
- home mnt root tmp var var/tmp var/lib var/lib/rpm);
-}
-
-#------------------------------------------------------------------------------
-#-PADTODO
-sub choosePackages {
- $o->setPackages($o, \@install_classes) if $_[1] == 1;
- $o->choosePackages($o->{packages}, $o->{compss});
- $o->{packages}{$_}{selected} = 1 foreach @{$o->{base}};
-}
-
-#------------------------------------------------------------------------------
-sub doInstallStep {
- $o->beforeInstallPackages;
- $o->installPackages($o->{packages});
- $o->afterInstallPackages;
-}
-
-#------------------------------------------------------------------------------
-sub configureNetwork {
- my ($clicked, $entered) = @_;
-
- if ($o->{isUpgrade} && !$clicked) {
- $o->{netc} or $o->{netc} = {};
- add2hash($o->{netc}, { network::read_conf("$o->{prefix}/etc/sysconfig/network") });
- add2hash($o->{netc}, { network::read_resolv_conf("$o->{prefix}/etc/resolv.conf") });
- foreach (all("$o->{prefix}/etc/sysconfig/network-scripts")) {
- if (/ifcfg-(\w*)/) {
- push @{$o->{intf}}, { network::read_conf("$o->{prefix}/etc/sysconfig/network-scripts/$_") };
- }
- }
- }
-
- $o->configureNetwork($entered == 1 && !$clicked)
-}
-#------------------------------------------------------------------------------
-#-PADTODO
-sub configureTimezone {
- my ($clicked) = $_[0];
- my $f = "$o->{prefix}/etc/sysconfig/clock";
- return if ((-s $f) || 0) > 0 && $_[1] == 1 && !$clicked && !$::testing;
-
- add2hash($o->{timezone}, { timezone::read($f) }) if $o->{isUpgrade} && !$clicked;
- $o->{timezone}{GMT} = 1 unless exists $o->{timezone}{GMT}; #- take GMT by default if nothing else.
-
- $o->timeConfig($f);
-}
-#------------------------------------------------------------------------------
-sub configureServices { $o->servicesConfig }
-#------------------------------------------------------------------------------
-sub configurePrinter { $o->printerConfig }
-#------------------------------------------------------------------------------
-sub setRootPassword {
- return if ($o->{isUpgrade});
-
- $o->setRootPassword;
-}
-#------------------------------------------------------------------------------
-sub addUser {
- return if ($o->{isUpgrade});
-
- $o->addUser;
-
- addToBeDone {
- run_program::rooted($o->{prefix}, "pwconv") or log::l("pwconv failed"); #- use shadow passwords
- } 'doInstallStep';
-}
-
-#------------------------------------------------------------------------------
-#-PADTODO
-sub createBootdisk {
- fs::write($o->{prefix}, $o->{fstab});
- modules::write_conf("$o->{prefix}/etc/conf.modules", 'append');
- $o->createBootdisk($_[1] == 1);
-}
-
-#------------------------------------------------------------------------------
-sub setupBootloader {
- $o->setupBootloaderBefore if $_[1] == 1;
- $o->setupBootloader($_[1] > 1);
-}
-#------------------------------------------------------------------------------
-sub configureX {
- my ($clicked) = $_[0];
- $o->setupXfree if $o->{packages}{XFree86}{installed} || $clicked;
-}
-#------------------------------------------------------------------------------
-sub exitInstall { $o->exitInstall(getNextStep() eq "exitInstall") }
-
-
-#-######################################################################################
-#- MAIN
-#-######################################################################################
-sub main {
- $SIG{__DIE__} = sub { chomp $_[0]; log::l("ERROR: $_[0]") };
-
- $::beginner = $::expert = $::g_auto_install = 0;
- while (@_) {
- local $_ = shift;
- if (/--method/) {
- $o->{method} = shift;
- } elsif (/--step/) {
- $o->{steps}{first} = shift;
- } elsif (/--expert/) {
- $::expert = 1;
- } elsif (/--beginner/) {
- $::beginner = 1;
- #} elsif (/--ks/ || /--kickstart/) {
- # $::auto_install = 1;
- } elsif (/--g_auto_install/) {
- $::testing = $::g_auto_install = 1;
- $o->{partitioning}{auto_allocate} = 1;
- } elsif (/--pcmcia/) {
- $o->{pcmcia} = shift;
- }
- }
-
- #- if this fails, it's okay -- it might help with free space though
- unlink "/sbin/install" unless $::testing;
- unlink "/sbin/insmod" unless $::testing;
-
- print STDERR "in second stage install\n";
- log::openLog(($::testing || $o->{localInstall}) && 'debug.log');
- log::l("second stage install running");
- log::ld("extra log messages are enabled");
-
- #-really needed ??
- #-spawnSync();
- eval { spawnShell() };
-
- $o->{prefix} = $::testing ? "/tmp/test-perl-install" : "/mnt";
- $o->{root} = $::testing ? "/tmp/root-perl-install" : "/";
- mkdir $o->{prefix}, 0755;
- mkdir $o->{root}, 0755;
-
- #- make sure we don't pick up any gunk from the outside world
- $ENV{PATH} = "/usr/bin:/bin:/sbin:/usr/sbin:/usr/X11R6/bin:$o->{prefix}/sbin:$o->{prefix}/bin:$o->{prefix}/usr/sbin:$o->{prefix}/usr/bin:$o->{prefix}/usr/X11R6/bin" unless $::g_auto_install;
- $ENV{LD_LIBRARY_PATH} = "";
-
- if ($::auto_install) {
- require 'install_steps.pm';
- fs::mount(devices::make("fd0"), "/mnt", "vfat", 0);
-
- my $O = $o;
- my $f = "/mnt/auto_inst.cfg";
- {
- local *F;
- open F, $f or die _("Error reading file $f");
-
- local $/ = "\0";
- eval <F>;
- }
- $@ and die _("Bad kickstart file %s (failed %s)", $f, $@);
- fs::umount("/mnt");
- add2hash($o, $O);
- } else {
- require 'install_steps_graphical.pm';
- }
-
- $o->{prefix} = $::testing ? "/tmp/test-perl-install" : "/mnt";
- mkdir $o->{prefix}, 0755;
-
- #- make sure we don't pick up any gunk from the outside world
- $ENV{PATH} = "/usr/bin:/bin:/sbin:/usr/sbin:/usr/X11R6/bin:$o->{prefix}/sbin:$o->{prefix}/bin:$o->{prefix}/usr/sbin:$o->{prefix}/usr/bin:$o->{prefix}/usr/X11R6/bin";
- $ENV{LD_LIBRARY_PATH} = "";
-
- #- needed very early for install_steps_graphical
- eval { $o->{mouse} ||= mouse::detect() };
-
- $::o = $o = $::auto_install ?
- install_steps->new($o) :
- install_steps_graphical->new($o);
-
- $o->{netc} = network::read_conf("/tmp/network");
- if (my ($file) = glob_('/tmp/ifcfg-*')) {
- log::l("found network config file $file");
- my $l = network::read_interface_conf($file);
- add2hash(network::findIntf($o->{intf} ||= [], $l->{DEVICE}), $l);
- }
-
- modules::load_deps("/modules/modules.dep");
- $o->{modules} = modules::get_stage1_conf($o->{modules}, "/tmp/conf.modules");
- modules::read_already_loaded();
- modparm::read_modparm_file(-e "modparm.lst" ? "modparm.lst" : "/usr/share/modparm.lst");
-
- #-the main cycle
- my $clicked = 0;
- MAIN: for ($o->{step} = $o->{steps}{first};; $o->{step} = getNextStep()) {
- $o->{steps}{$o->{step}}{entered}++;
- $o->enteringStep($o->{step});
- eval {
- &{$install2::{$o->{step}}}($clicked, $o->{steps}{$o->{step}}{entered});
- };
- $o->kill_action;
- $clicked = 0;
- while ($@) {
- local $_ = $@;
- $o->kill_action;
- /^setstep (.*)/ and $o->{step} = $1, $clicked = 1, redo MAIN;
- /^theme_changed$/ and redo MAIN;
- eval { $o->errorInStep($_) } unless /^already displayed/;
- $@ and next;
- $o->{step} = $o->{steps}{$o->{step}}{onError};
- redo MAIN;
- }
- $o->leavingStep($o->{step});
- $o->{steps}{$o->{step}}{done} = 1;
-
- last if $o->{step} eq 'exitInstall';
- }
-
- fs::write($o->{prefix}, $o->{fstab});
- modules::write_conf("$o->{prefix}/etc/conf.modules", 'append');
-
- killCardServices();
-
- log::l("installation complete, leaving");
-
- if ($::g_auto_install) {
- my $h = $o; $o = {};
- $h->{$_} and $o->{$_} = $h->{$_} foreach qw(lang autoSCSI printer mouse netc timezone bootloader superuser intf keyboard mkbootdisk base user modules installClass partitions);
-
- delete $o->{user}{password2};
- delete $o->{superuser}{password2};
-
- print Data::Dumper->Dump([$o], ['$o']), "\0";
- }
-}
-
-sub killCardServices {
- my $pid = chop_(cat_("/tmp/cardmgr.pid"));
- $pid and kill(15, $pid); #- send SIGTERM
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm
deleted file mode 100644
index 9812c3efb..000000000
--- a/perl-install/install_any.pm
+++ /dev/null
@@ -1,156 +0,0 @@
-package install_any;
-
-use diagnostics;
-use strict;
-use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK);
-
-@ISA = qw(Exporter);
-%EXPORT_TAGS = (
- all => [ qw(getNextStep spawnSync spawnShell addToBeDone) ],
-);
-@EXPORT_OK = map { @$_ } values %EXPORT_TAGS;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :system);
-use commands;
-use run_program;
-use detect_devices;
-use pkgs;
-use log;
-
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-sub relGetFile($) {
- local $_ = $_[0];
- my $dir = m|/| ? "mdkinst" :
- (member($_, qw(compss compssList depslist hdlist)) ? "base" : "RPMS");
- $_ = "Mandrake/$dir/$_";
- s/i386/i586/;
- $_;
-}
-sub getFile($) {
- local $^W = 0;
- if ($::o->{method} && $::o->{method} eq "ftp") {
- require 'ftp.pm';
- *install_any::getFile = \&ftp::getFile;
- } else {
- *install_any::getFile = sub($) {
- open getFile, "/tmp/rhimage/" . relGetFile($_[0]) or return;
- \*getFile;
- };
- }
- goto &getFile;
-}
-
-sub kernelVersion {
- local $_ = readlink("$::o->{prefix}/boot/vmlinuz") || $::testing && "vmlinuz-2.2.testversion" or die "I couldn't find the kernel package!";
- first(/vmlinuz-(.*)/);
-}
-
-
-sub getNextStep {
- my ($s) = $::o->{steps}{first};
- $s = $::o->{steps}{$s}{next} while $::o->{steps}{$s}{done};
- $s;
-}
-
-sub spawnSync {
- return if $::o->{localInstall} || $::testing;
- fork and return;
- while (1) { sleep(30); sync(); }
-}
-
-sub spawnShell {
- return if $::o->{localInstall} || $::testing;
-
- -x "/bin/sh" or die "cannot open shell - /usr/bin/sh doesn't exist";
-
- fork and return;
-
- local *F;
- sysopen F, "/dev/tty2", 2 or die "cannot open /dev/tty2 -- no shell will be provided";
-
- open STDIN, "<&F" or die '';
- open STDOUT, ">&F" or die '';
- open STDERR, ">&F" or die '';
- close F;
-
- c::setsid();
-
- ioctl(STDIN, c::TIOCSCTTY(), 0) or warn "could not set new controlling tty: $!";
-
- exec {"/bin/sh"} "-/bin/sh" or log::l("exec of /bin/sh failed: $!");
-}
-
-sub shells($) {
- my ($o) = @_;
- my @l = grep { -x "$o->{prefix}$_" } @{$o->{shells}};
- @l ? @l : "/bin/bash";
-}
-
-sub getAvailableSpace {
- my ($o) = @_;
-
- do { $_->{mntpoint} eq '/usr' and return $_->{size} * 512 } foreach @{$o->{fstab}};
- do { $_->{mntpoint} eq '/' and return $_->{size} * 512 } foreach @{$o->{fstab}};
-
- if ($::testing) {
- log::l("taking 200MB for testing");
- return 200 << 20;
- }
- die "missing root partition";
-}
-
-sub setPackages($$) {
- my ($o, $install_classes) = @_;
-
- if ($o->{packages}) {
- $_->{selected} = 0 foreach values %{$o->{packages}};
- } else {
- my $useHdlist = $o->{method} !~ /nfs|hd/;
- eval { $o->{packages} = pkgs::psUsingHdlist() } if $useHdlist;
- $o->{packages} = pkgs::psUsingDirectory() if !$useHdlist || $@;
-
- pkgs::getDeps($o->{packages});
-
- $o->{compss} = pkgs::readCompss($o->{packages});
- $o->{compssListLevels} = pkgs::readCompssList($o->{packages});
- $o->{compssListLevels} ||= $install_classes;
- push @{$o->{base}}, "kernel-smp" if detect_devices::hasSMP();
- push @{$o->{base}}, "kernel-pcmcia-cs" if $o->{pcmcia};
- }
-
- do {
- my $p = $o->{packages}{$_} or log::l("missing base package $_"), next;
- pkgs::select($o->{packages}, $p, 1);
- } foreach @{$o->{base}};
-
- pkgs::setShowFromCompss($o->{compss}, $o->{installClass}, $o->{lang});
- ($o->{packages_}{ind}, $o->{packages_}{select_level}) = pkgs::setSelectedFromCompssList($o->{compssListLevels}, $o->{packages}, getAvailableSpace($o) * 0.7, $o->{installClass}, $o->{lang});
-}
-
-sub addToBeDone(&$) {
- my ($f, $step) = @_;
-
- return &$f() if $::o->{steps}{$step}{done};
-
- push @{$::o->{steps}{$step}{toBeDone}}, $f;
-}
-
-sub install_cpio {
- my ($dir, $name) = @_;
-
- return "$dir/$name" if -e "$dir/$name";
-
- my $cpio = "$dir.cpio.bz2";
- -e $cpio or return;
-
- eval { commands::rm("-r", $dir) };
- mkdir $dir, 0755;
- run_program::run("cd $dir ; bzip2 -cd $cpio | cpio -id $name $name/*");
- "$dir/$name";
-}
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
deleted file mode 100644
index 42dd72d17..000000000
--- a/perl-install/install_steps.pm
+++ /dev/null
@@ -1,307 +0,0 @@
-package install_steps;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:file :system :common);
-use install_any qw(:all);
-use partition_table qw(:types);
-use detect_devices;
-use timezone;
-use modules;
-use run_program;
-use lilo;
-use lang;
-use keyboard;
-use printer;
-use pkgs;
-use log;
-use fsedit;
-use commands;
-use network;
-use fs;
-
-
-#-######################################################################################
-#- OO Stuff
-#-######################################################################################
-sub new($$) {
- my ($type, $o) = @_;
-
- bless $o, ref $type || $type;
- return $o;
-}
-
-#-######################################################################################
-#- In/Out Steps Functions
-#-######################################################################################
-sub enteringStep($$) {
- my ($o, $step) = @_;
- log::l("starting step `$step'");
-
- for (my $s = $o->{steps}{first}; $s; $s = $o->{steps}{$s}{next}) {
-
- next if $o->{steps}{$s}{done} && !$o->{steps}{$s}{redoable};
- next if $o->{steps}{$s}{reachable};
-
- my $reachable = 1;
- if (my $needs = $o->{steps}{$s}{needs}) {
- my @l = ref $needs ? @$needs : $needs;
- $reachable = min(map { $o->{steps}{$_}{done} || 0 } @l);
- }
- $o->{steps}{$s}{reachable} = 1 if $reachable;
- }
-}
-sub leavingStep($$) {
- my ($o, $step) = @_;
- log::l("step `$step' finished");
-
- $o->{steps}{$step}{reachable} = $o->{steps}{$step}{redoable};
-
- while (my $f = shift @{$o->{steps}{$step}{toBeDone} || []}) {
- eval { &$f() };
- $o->ask_warn(_("Error"), [
-_("An error occurred, i don't know how to handle it nicely,
-so continue at your own risk :("), $@ ]) if $@;
- }
-}
-
-sub errorInStep($$) { print "error :(\n"; exit 1 }
-sub kill_action {}
-
-
-#-######################################################################################
-#- Steps Functions
-#-######################################################################################
-#------------------------------------------------------------------------------
-sub selectLanguage {
- my ($o) = @_;
- lang::set($o->{lang});
-
- unless ($o->{keyboard_force}) {
- $o->{keyboard} = keyboard::lang2keyboard($o->{lang});
- selectKeyboard($o);
- }
-}
-#------------------------------------------------------------------------------
-sub selectKeyboard {
- my ($o) = @_;
- keyboard::setup($o->{keyboard})
-}
-#------------------------------------------------------------------------------
-sub selectPath {}
-#------------------------------------------------------------------------------
-sub selectInstallClass($@) {}
-#------------------------------------------------------------------------------
-sub setupSCSI { modules::load_thiskind('scsi') }
-#------------------------------------------------------------------------------
-sub doPartitionDisks($$) {
- my ($o, $hds) = @_;
- return if $::testing;
- partition_table::write($_) foreach @$hds;
-}
-
-#------------------------------------------------------------------------------
-sub rebootNeeded($) {
- my ($o) = @_;
- log::l("Rebooting...");
- exec "true";
-}
-
-sub choosePartitionsToFormat($$) {
- my ($o, $fstab) = @_;
-
- $_->{mntpoint} = "swap" foreach grep { isSwap($_) } @$fstab;
- $_->{toFormat} = $_->{mntpoint} &&
- ($_->{notFormatted} || $o->{partitioning}{autoformat}) foreach @$fstab;
-}
-
-sub formatPartitions {
- my $o = shift;
- foreach (@_) {
- fs::format_part($_) if $_->{toFormat};
- }
-}
-
-#------------------------------------------------------------------------------
-sub setPackages {
- my ($o, $install_classes) = @_;
- install_any::setPackages($o, $install_classes);
-}
-sub choosePackages($$$) {
- my ($o, $packages, $compss) = @_;
-}
-
-sub beforeInstallPackages {
- my ($o) = @_;
-
- network::add2hosts("$o->{prefix}/etc/hosts", "localhost.localdomain", "127.0.0.1");
- pkgs::init_db($o->{prefix}, $o->{isUpgrade});
-}
-
-sub installPackages($$) {
- my ($o, $packages) = @_;
- my $toInstall = [ grep { $_->{selected} && !$_->{installed} } values %$packages ];
- pkgs::install($o->{prefix}, $toInstall);
-}
-
-sub afterInstallPackages($) {
- my ($o) = @_;
-
- #- why not? cuz weather is nice today :-) [pixel]
- sync(); sync();
-
- $o->pcmciaConfig();
-}
-
-#------------------------------------------------------------------------------
-sub selectMouse($) {
- my ($o) = @_;
-}
-
-#------------------------------------------------------------------------------
-sub configureNetwork($) {
- my ($o) = @_;
- my $etc = "$o->{prefix}/etc";
-
- network::write_conf("$etc/sysconfig/network", $o->{netc});
- network::write_resolv_conf("$etc/resolv.conf", $o->{netc});
- network::write_interface_conf("$etc/sysconfig/network-scripts/ifcfg-$_->{DEVICE}", $_) foreach @{$o->{intf}};
- network::add2hosts("$etc/hosts", $o->{netc}{HOSTNAME}, map { $_->{IPADDR} } @{$o->{intf}});
- network::sethostname($o->{netc}) unless $::testing;
- network::addDefaultRoute($o->{netc}) unless $::testing;
- #-res_init(); #- reinit the resolver so DNS changes take affect
-}
-
-#------------------------------------------------------------------------------
-sub pcmciaConfig($) {
- my ($o) = @_;
- my $t = $o->{pcmcia};
- my $f = "$o->{prefix}/etc/sysconfig/pcmcia";
-
- #- should be set after installing the package above else the file will be renamed.
- setVarsInSh($f, {
- PCMCIA => $t ? "yes" : "no",
- PCIC => $t,
- PCIC_OPTS => "",
- CORE_OPTS => "",
- });
-}
-
-#------------------------------------------------------------------------------
-sub timeConfig {
- my ($o, $f) = @_;
- timezone::write($o->{prefix}, $o->{timezone}, $f);
-}
-
-#------------------------------------------------------------------------------
-sub servicesConfig {}
-#------------------------------------------------------------------------------
-sub printerConfig {
- my($o) = @_;
- if ($o->{printer}{complete}) {
-
- pkgs::select($o->{packages}, $o->{packages}{'rhs-printfilters'});
- $o->installPackages($o->{packages});
-
- printer::configure_queue($o->{printer});
- }
-}
-
-#------------------------------------------------------------------------------
-my @etc_pass_fields = qw(name password uid gid realname home shell);
-sub setRootPassword($) {
- my ($o) = @_;
- my %u = %{$o->{superuser}};
- my $p = $o->{prefix};
-
- $u{password} = crypt_($u{password}) if $u{password};
-
- my @lines = cat_(my $f = "$p/etc/passwd") or log::l("missing passwd file"), return;
-
- local *F;
- open F, "> $f" or die "failed to write file $f: $!\n";
- foreach (@lines) {
- if (/^root:/) {
- chomp;
- my %l; @l{@etc_pass_fields} = split ':';
- add2hash(\%u, \%l);
- $_ = join(':', @u{@etc_pass_fields}) . "\n";
- }
- print F $_;
- }
-}
-
-#------------------------------------------------------------------------------
-sub addUser($) {
- my ($o) = @_;
- my %u = %{$o->{user}};
- my $p = $o->{prefix};
- my @passwd = cat_("$p/etc/passwd");;
-
- !$u{name} || getpwnam($u{name}) and return;
-
- for ($u{uid} = 500; getpwuid($u{uid}); $u{uid}++) {}
- for ($u{gid} = 500; getgrgid($u{gid}); $u{gid}++) {}
- $u{home} ||= "/home/$u{name}";
-
- $u{password} = crypt_($u{password}) if $u{password};
-
- return if $::testing;
-
- local *F;
- open F, ">> $p/etc/passwd" or die "can't append to passwd file: $!";
- print F join(':', @u{@etc_pass_fields}), "\n";
-
- open F, ">> $p/etc/group" or die "can't append to group file: $!";
- print F "$u{name}::$u{gid}:\n";
-
- eval { commands::cp("-f", "$p/etc/skel", "$p$u{home}") }; $@ and log::l("copying of skel failed: $@"), mkdir("$p$u{home}", 0750);
- commands::chown_("-r", "$u{uid}.$u{gid}", "$p$u{home}");
-}
-
-#------------------------------------------------------------------------------
-sub createBootdisk($) {
- my ($o) = @_;
- my $dev = $o->{mkbootdisk} or return;
-
- my @l = detect_devices::floppies();
-
- $dev = shift @l || die _("no floppy available")
- if $dev eq "1"; #- special case meaning autochoose
-
- return if $::testing;
-
- lilo::mkbootdisk($o->{prefix}, install_any::kernelVersion(), $dev);
- $o->{mkbootdisk} = $dev;
-}
-
-#------------------------------------------------------------------------------
-sub setupBootloaderBefore {
- my ($o) = @_;
- add2hash($o->{bootloader} ||= {}, lilo::read($o->{prefix}, "/etc/lilo.conf"));
- lilo::suggest($o->{prefix}, $o->{bootloader}, $o->{hds}, $o->{fstab}, install_any::kernelVersion());
- $o->{bootloader}{keytable} ||= keyboard::kmap($o->{keyboard});
-}
-
-sub setupBootloader($) {
- my ($o) = @_;
- return if $::g_auto_install;
- lilo::install($o->{prefix}, $o->{bootloader});
-}
-
-#------------------------------------------------------------------------------
-sub setupXfree {
- my ($o) = @_;
-}
-
-#------------------------------------------------------------------------------
-sub exitInstall {}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm
deleted file mode 100644
index 5b616bd2c..000000000
--- a/perl-install/install_steps_interactive.pm
+++ /dev/null
@@ -1,758 +0,0 @@
-package install_steps_interactive;
-
-
-use diagnostics;
-use strict;
-use vars qw(@ISA);
-
-@ISA = qw(install_steps);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :file :functional);
-use partition_table qw(:types);
-use install_steps;
-use pci_probing::main;
-use install_any;
-use detect_devices;
-use timezone;
-use network;
-use mouse;
-use modules;
-use lang;
-use pkgs;
-use keyboard;
-use fs;
-use modparm;
-use log;
-use printer;
-use lilo;
-#-######################################################################################
-#- In/Out Steps Functions
-#-######################################################################################
-sub errorInStep($$) {
- my ($o, $err) = @_;
- $o->ask_warn(_("Error"), [ _("An error occurred"), $err ]);
-}
-
-sub kill_action {
- my ($o) = @_;
- $o->kill;
-}
-
-#-######################################################################################
-#- Steps Functions
-#-######################################################################################
-#------------------------------------------------------------------------------
-sub selectLanguage($) {
- my ($o) = @_;
- $o->{lang} =
- lang::text2lang($o->ask_from_list("Language",
- _("Which language do you want?"),
- # the translation may be used for the help
- [ lang::list() ],
- lang::lang2text($o->{lang})));
- install_steps::selectLanguage($o);
-}
-#------------------------------------------------------------------------------
-sub selectKeyboard($) {
- my ($o) = @_;
- $o->{keyboard} =
- keyboard::text2keyboard($o->ask_from_list_("Keyboard",
- _("Which keyboard do you have?"),
- [ keyboard::list() ],
- keyboard::keyboard2text($o->{keyboard})));
- $o->{keyboard_force} = 1;
- install_steps::selectKeyboard($o);
-}
-#------------------------------------------------------------------------------
-sub selectPath($) {
- my ($o) = @_;
- $o->{isUpgrade} =
- $o->ask_from_list_(_("Install/Upgrade"),
- _("Is this an install or an upgrade?"),
- [ __("Install"), __("Upgrade") ],
- $o->{isUpgrade} ? "Upgrade" : "Install") eq "Upgrade";
- install_steps::selectPath($o);
-}
-#------------------------------------------------------------------------------
-sub selectRootPartition($@) {
- my ($o,@partitions) = @_;
- $o->{upgradeRootPartition} =
- $o->ask_from_list_(_("Root Partition"),
- _("What is the root partition of your system?"),
- [ @partitions ], $o->{upgradeRootPartitions});
-#- TODO check choice, then mount partition in $o->{prefix} and autodetect.
-#- install_steps::selectRootPartition($o);
-}
-#------------------------------------------------------------------------------
-sub selectInstallClass($@) {
- my ($o, @classes) = @_;
- $o->{installClass} =
- $o->ask_from_list_(_("Install Class"),
- _("What type of user will you have?"),
- [ @classes ], $o->{installClass});
- install_steps::selectInstallClass($o);
-}
-
-#------------------------------------------------------------------------------
-sub selectMouse {
- my ($o, $force) = @_;
-
- my $name = $o->{mouse}{FULLNAME};
- if (!$name || $::expert || $force) {
- $name = $o->ask_from_list_('', _("Which mouse do you have"), [ mouse::names() ], $name);
- $o->{mouse} = mouse::name2mouse($name);
- }
- my $b = $o->{mouse}{nbuttons} < 3;
- $o->{mouse}{XEMU3} = 'yes' if $::expert && $o->ask_yesorno('', _("Emulate third button"), $b) || $b;
-
- $o->{mouse}{device} = mouse::serial_ports_names2dev(
- $o->ask_from_list(_("Mouse Port"),
- _("Which serial port is your mouse connected to?"),
- [ mouse::serial_ports_names() ])) if $o->{mouse}{device} eq "ttyS";
-
- $o->SUPER::selectMouse;
-}
-#------------------------------------------------------------------------------
-sub setupSCSI { setup_thiskind($_[0], 'scsi', $_[1], $_[2]) }
-#------------------------------------------------------------------------------
-sub rebootNeeded($) {
- my ($o) = @_;
- $o->ask_warn('', _("You need to reboot for the partition table modifications to take place"));
-
- install_steps::rebootNeeded($o);
-}
-sub choosePartitionsToFormat($$) {
- my ($o, $fstab) = @_;
-
- $o->SUPER::choosePartitionsToFormat($fstab);
-
- my @l = grep { $_->{mntpoint} && !($::beginner && isSwap($_)) } @$fstab;
-
- return if $::beginner && 0 == grep { ! $_->{toFormat} } @l;
-
- $o->ask_many_from_list_ref('', _("Choose the partitions you want to format"),
- [ map { isSwap($_) ? type2name($_->{type}) . " ($_->{device})" : $_->{mntpoint} } @l ],
- [ map { \$_->{toFormat} } @l ]) or die "cancel";
-}
-
-sub formatPartitions {
- my $o = shift;
- my $w = $o->wait_message('', '');
- foreach (@_) {
- if ($_->{toFormat}) {
- $w->set(_("Formatting partition %s", $_->{device}));
- fs::format_part($_);
- }
- }
-}
-#------------------------------------------------------------------------------
-sub setPackages {
- my ($o, $install_classes) = @_;
- my $w = $o->wait_message('', _("Searching for available packages"));
- $o->SUPER::setPackages($install_classes);
-}
-
-#------------------------------------------------------------------------------
-sub configureNetwork($) {
- my ($o, $first_time) = @_;
- my $r = '';
- if ($o->{intf}) {
- if ($first_time) {
- my @l = (
- __("Keep the current IP configuration"),
- __("Reconfigure network now"),
- __("Don't set up networking"),
- );
- $r = $o->ask_from_list_(_("Network Configuration"),
- _("LAN networking has already been configured. Do you want to:"),
- [ @l ]);
- $r ||= "Don't";
- }
- } else {
- $o->ask_yesorno(_("Network Configuration"),
- _("Do you want to configure LAN (not dialup) networking for your installed system?")) or $r = "Don't";
- }
-
- if ($r =~ /^Don\'t/) {
- $o->{netc}{NETWORKING} = "false";
- } elsif ($r !~ /^Keep/) {
- $o->setup_thiskind('net', !$::expert, 1);
- my @l = detect_devices::getNet() or die _("no network card found");
-
- my $last; foreach ($::beginner ? $l[0] : @l) {
- my $intf = network::findIntf($o->{intf} ||= [], $_);
- add2hash($intf, $last);
- add2hash($intf, { NETMASK => '255.255.255.0' });
- $o->configureNetworkIntf($intf) or return;
-
- $o->{netc} ||= {};
- delete $o->{netc}{dnsServer};
- delete $o->{netc}{GATEWAY};
- $last = $intf;
- }
- #- {
- #- my $wait = $o->wait_message(_("Hostname"), _("Determining host name and domain..."));
- #- network::guessHostname($o->{prefix}, $o->{netc}, $o->{intf});
- #- }
- $o->configureNetworkNet($o->{netc}, $last ||= {}, @l) or return;
- }
- install_steps::configureNetwork($o);
-}
-
-sub configureNetworkIntf {
- my ($o, $intf) = @_;
- delete $intf->{NETWORK};
- delete $intf->{BROADCAST};
- my @fields = qw(IPADDR NETMASK);
- $o->ask_from_entries_ref(_("Configuring network device %s", $intf->{DEVICE}),
-_("Please enter the IP configuration for this machine.
-Each item should be entered as an IP address in dotted-decimal
-notation (for example, 1.2.3.4)."),
- [ _("IP address:"), _("Netmask:")],
- [ \$intf->{IPADDR}, \$intf->{NETMASK} ],
- complete => sub {
- for (my $i = 0; $i < @fields; $i++) {
- unless (network::is_ip($intf->{$fields[$i]})) {
- $o->ask_warn('', _("IP address should be in format 1.2.3.4"));
- return (1,$i);
- }
- return 0;
- }
- },
- focus_out => sub {
- $intf->{NETMASK} = network::netmask($intf->{IPADDR}) unless $_[0]
- }
-
- );
-}
-
-sub configureNetworkNet {
- my ($o, $netc, $intf, @devices) = @_;
- $netc->{dnsServer} ||= network::dns($intf->{IPADDR});
- $netc->{GATEWAY} ||= network::gateway($intf->{IPADDR});
-
- $o->ask_from_entries_ref(_("Configuring network"),
-_("Please enter your host name.
-Your host name should be a fully-qualified host name,
-such as ``mybox.mylab.myco.com''.
-Also give the gateway if you have one"),
- [_("Host name:"), _("DNS server:"), _("Gateway:"), !$::beginner ? _("Gateway device:") : ()],
- [(map { \$netc->{$_}} qw(HOSTNAME dnsServer GATEWAY)),
- {val => \$netc->{GATEWAYDEV}, list => \@devices}]
- );
-}
-
-#------------------------------------------------------------------------------
-sub timeConfig {
- my ($o, $f) = @_;
-
- $o->{timezone}{GMT} = $o->ask_yesorno('', _("Is your hardware clock set to GMT?"), $o->{timezone}{GMT});
- $o->{timezone}{timezone} ||= timezone::bestTimezone(lang::lang2text($o->{lang}));
- $o->{timezone}{timezone} = $o->ask_from_list('', _("In which timezone are you"), [ timezone::getTimeZones($::g_auto_install ? '' : $o->{prefix}) ], $o->{timezone}{timezone});
- install_steps::timeConfig($o,$f);
-}
-
-#------------------------------------------------------------------------------
-#-sub servicesConfig {}
-#------------------------------------------------------------------------------
-sub printerConfig($) {
- my ($o) = @_;
- $o->{printer}{want} =
- $o->ask_yesorno(_("Printer"),
- _("Would you like to configure a printer?"),
- $o->{printer}{want});
- return if !$o->{printer}{want};
-
- unless (($::testing)) {
- printer::set_prefix($o->{prefix});
- pkgs::select($o->{packages}, $o->{packages}{'rhs-printfilters'});
- $o->installPackages($o->{packages});
-
- }
- printer::read_printer_db();
-
- $o->{printer}{complete} = 0;
- if ($::expert) {
- #std info
- #Don't wait, if the user enter something, you must remember it
- $o->ask_from_entries_ref(_("Standard Printer Options"),
- _("Every print queue (which print jobs are directed to) needs a
-name (often lp) and a spool directory associated with it. What
-name and directory should be used for this queue?"),
- [_("Name of queue:"), _("Spool directory:")],
- [\$o->{printer}{QUEUE}, \$o->{printer}{SPOOLDIR}],
- changed => sub
- {
- $o->{printer}{SPOOLDIR}
- = "$printer::spooldir/$o->{printer}{QUEUE}" unless $_[0];
- },
- );
- }
-
- $o->{printer}{str_type} =
- $o->ask_from_list_(_("Select Printer Connection"),
- _("How is the printer connected?"),
- [keys %printer::printer_type],
- ${$o->{printer}}{str_type},
- );
- $o->{printer}{TYPE} = $printer::printer_type{$o->{printer}{str_type}};
-
- if ($o->{printer}{TYPE} eq "LOCAL") {
- {
- my $w = $o->wait_message(_("Test ports"), _("Detecting devices..."));
- eval { modules::load("lp");modules::load("parport_probe"); };
- }
-
- my @port = ();
- my @parport = detect_devices::whatPrinter();
- eval { modules::unload("parport_probe") };
- my $str;
- if ($parport[0]) {
- my $port = $parport[0]{port};
- $o->{printer}{DEVICE} = $port;
- my $descr = common::bestMatchSentence2($parport[0]{val}{DESCRIPTION}, @printer::entry_db_description);
- $o->{printer}{DBENTRY} = $printer::descr_to_db{$descr};
- $str = _("I have detected a %s on ", $parport[0]{val}{DESCRIPTION}) . $port;
- @port = map { $_->{port}} @parport;
- } else {
- @port = detect_devices::whatPrinterPort();
- }
- $o->{printer}{DEVICE} = $port[0] if $port[0];
-
- return if !$o->ask_from_entries_ref(_("Local Printer Device"),
- _("What device is your printer connected to \n(note that /dev/lp0 is equivalent to LPT1:)?\n") . $str ,
- [_("Printer Device:")],
- [{val => \$o->{printer}{DEVICE}, list => \@port }],
- );
- #-TAKE A GOODDEFAULT TODO
-
- } elsif ($o->{printer}{TYPE} eq "REMOTE") {
- return if !$o->ask_from_entries_ref(_("Remote lpd Printer Options"),
- _("To use a remote lpd print queue, you need to supply
-the hostname of the printer server and the queue name
-on that server which jobs should be placed in."),
- [_("Remote hostname:"), _("Remote queue:")],
- [\$o->{printer}{REMOTEHOST}, \$o->{printer}{REMOTEQUEUE}],
- );
-
- } elsif ($o->{printer}{TYPE} eq "SMB") {
- return if !$o->ask_from_entries_ref(
- _("SMB/Windows 95/NT Printer Options"),
- _("To print to a SMB printer, you need to provide the
-SMB host name (this is not always the same as the machines
-TCP/IP hostname) and possibly the IP address of the print server, as
-well as the share name for the printer you wish to access and any
-applicable user name, password, and workgroup information."),
- [_("SMB server host:"), _("SMB server IP:"),
- _("Share name:"), _("User name:"), _("Password:"),
- _("Workgroup:")],
- [\$o->{printer}{SMBHOST}, \$o->{printer}{SMBHOSTIP},
- \$o->{printer}{SMBSHARE}, \$o->{printer}{SMBUSER},
- {val => \$o->{printer}{SMBPASSWD}, hidden => 1}, \$o->{printer}{SMBWORKGROUP}
- ],
- complete => sub {
- unless (network::is_ip($o->{printer}{SMBHOSTIP})) {
- $o->ask_warn('', _("IP address should be in format 1.2.3.4"));
- return (1,1);
- }
- return 0;
- },
-
- );
- } else {#($o->{printer}{TYPE} eq "NCP") {
- return if !$o->ask_from_entries_ref(_("NetWare Printer Options"),
- _("To print to a NetWare printer, you need to provide the
-NetWare print server name (this is not always the same as the machines
-TCP/IP hostname) as well as the print queue name for the printer you
-wish to access and any applicable user name and password."),
- [_("Printer Server:"), _("Print Queue Name:"),
- _("User name:"), _("Password:")],
- [\$o->{printer}{NCPHOST}, \$o->{printer}{NCPQUEUE},
- \$o->{printer}{NCPUSER}, {val => \$o->{printer}{NCPPASSWD}, hidden => 1}],
- );
- }
-
-
-
- $o->{printer}{DBENTRY} =
- $printer::descr_to_db{
- $o->ask_from_list_(_("Configure Printer"),
- _("What type of printer do you have?"),
- [@printer::entry_db_description],
- $printer::db_to_descr{$o->{printer}{DBENTRY}},
- )
- };
-
- my %db_entry = %{$printer::thedb{$o->{printer}{DBENTRY}}};
-
-
- #-paper size conf
- $o->{printer}{PAPERSIZE} =
- $o->ask_from_list_(_("Paper Size"),
- _("Paper Size"),
- \@printer::papersize_type,
- $o->{printer}{PAPERSIZE}
- );
-
- #-resolution size conf
- my @list_res = @{$db_entry{RESOLUTION}};
- my @res = map { "${$_}{XDPI}x${$_}{YDPI}" } @list_res;
- if (@list_res) {
- $o->{printer}{RESOLUTION} = $o->ask_from_list_(_("Resolution"),
- _("Resolution"),
- \@res,
- $o->{printer}{RESOLUTION},
- );
- } else {
- $o->{printer}{RESOLUTION} = "Default";
- }
-
- $o->{printer}{CRLF} = $db_entry{DESCR} =~ /HP/;
- $o->{printer}{CRLF}= $o->ask_yesorno(_("CRLF"),
- _("Fix stair-stepping of text?"),
- $o->{printer}{CRLF});
-
-
- #-color_depth
- if ($db_entry{BITSPERPIXEL}) {
- my @list_col = @{$db_entry{BITSPERPIXEL}};
- my @col = map { "$_->{DEPTH} $_->{DESCR}" } @list_col;
- my %col_to_depth = map { ("$_->{DEPTH} $_->{DESCR}", $_->{DEPTH}) } @list_col;
- my %depth_to_col = reverse %col_to_depth;
-
- if (@list_col) {
- my $is_uniprint = $db_entry{GSDRIVER} eq "uniprint";
- if ($is_uniprint) {
- $o->{printer}{BITSPERPIXEL} =
- $col_to_depth{$o->ask_from_list_
- (_("Configure Uniprint Driver"),
- _("You may now configure the uniprint options for this printer."),
- \@col,
- $depth_to_col{$o->{printer}{BITSPERPIXEL}},
- )};
-
- } else {
- $o->{printer}{BITSPERPIXEL} =
- $col_to_depth{$o->ask_from_list_
- (_("Configure Color Depth"),
- _("You may now configure the color options for this printer."),
- \@col,
- $depth_to_col{$o->{printer}{BITSPERPIXEL}},
- )};
- }
- } else {
- $o->{printer}{BITSPERPIXEL} = "Default";
- }
- }
- $o->{printer}{complete} = 1;
-
- install_steps::printerConfig($o);
-}
-
-
-#------------------------------------------------------------------------------
-sub setRootPassword($) {
- my ($o) = @_;
- $o->{superuser}{password2} ||= $o->{user}{password} ||= "";
- my $sup = $o->{superuser};
-
- $o->ask_from_entries_ref(_("Set root password"),
- _("Set root password"),
- [_("Password"), _("Password (again)")],
- [{ val => \$sup->{password}, hidden => 1},
- { val => \$sup->{password2}, hidden => 1}],
- complete => sub {
- $sup->{password} eq $sup->{password2} or $o->ask_warn('', [ _("You must enter the same password"), _("Please try again") ]), return (1,1);
- (length $sup->{password} < 6) and $o->ask_warn('', _("This password is too simple")), return (1,0);
- return 0
- }
- );
- install_steps::setRootPassword($o);
-}
-
-#------------------------------------------------------------------------------
-#-addUser
-#------------------------------------------------------------------------------
-sub addUser($) {
- my ($o) = @_;
- $o->{user}{password2} ||= $o->{user}{password} ||= "";
- my $u = $o->{user};
- my @fields = qw(realname name password password2);
- my @shells = install_any::shells($o);
-
- $o->ask_from_entries_ref(
- _("Add user"),
- _("Enter a user"),
- [ _("Real name"), _("User name"), _("Password"), _("Password (again)"), _("Shell") ],
- [ \$u->{realname}, \$u->{name},
- {val => \$u->{password}, hidden => 1}, {val => \$u->{password2}, hidden => 1},
- {val => \$u->{shell}, list => \@shells, not_edit => !$::expert},
- ],
- focus_out => sub {
- if ($_[0] eq 0) {
- $u->{name} = lc first($u->{realname} =~ /((\w|-)+)/);
- }
- },
- complete => sub {
- $u->{password} eq $u->{password2} or $o->ask_warn('', [ _("You must enter the same password"), _("Please try again") ]), return (1,3);
- #(length $u->{password} < 6) and $o->ask_warn('', _("This password is too simple")), return (1,2);
- $u->{name} or $o->ask_warn('', _("Please give a user name")), return (1,0);
- $u->{name} =~ /^[a-z0-9_-]+$/ or $o->ask_warn('', _("The user name must contain only lower cased letters, numbers, `-' and `_'")), return (1,0);
- return 0;
- },
- ) or return;
- install_steps::addUser($o);
- $o->{user} = {};
- goto &addUser if $::expert;
-}
-
-
-
-
-#------------------------------------------------------------------------------
-sub createBootdisk {
- my ($o, $first_time) = @_;
- my @l = detect_devices::floppies();
-
- if ($first_time || @l == 1) {
- $o->ask_yesorno('',
- _("A custom bootdisk provides a way of booting into your Linux system without
-depending on the normal bootloader. This is useful if you don't want to install
-lilo on your system, or another operating system removes lilo, or lilo doesn't
-work with your hardware configuration. A custom bootdisk can also be used with
-the Mandrake rescue image, making it much easier to recover from severe system
-failures. Would you like to create a bootdisk for your system?"), $o->{mkbootdisk}) or return;
- $o->{mkbootdisk} = $l[0] if !$o->{mkbootdisk} || $o->{mkbootdisk} eq "1";
- } else {
- @l or die _("Sorry, no floppy drive available");
-
- $o->{mkbootdisk} = $o->ask_from_list('',
- _("Choose the floppy drive you want to use to make the bootdisk"),
- [ @l, "Cancel" ], $o->{mkbootdisk});
- return if $o->{mkbootdisk} eq "Cancel";
- }
-
- $o->ask_warn('', _("Insert a floppy in drive %s", $o->{mkbootdisk}));
- my $w = $o->wait_message('', _("Creating bootdisk"));
- install_steps::createBootdisk($o);
-}
-
-#------------------------------------------------------------------------------
-sub setupBootloaderBefore {
- my ($o) = @_;
- my $w = $o->wait_message('', _("Preparing bootloader"));
- $o->SUPER::setupBootloaderBefore($o);
-}
-
-sub setupBootloader {
- my ($o, $more) = @_;
- my $b = $o->{bootloader};
-
- if ($::beginner && !$more) {
- my @l = (__("First sector of drive"), __("First sector of boot partition"));
-
- my $boot = $o->{hds}[0]{device};
- my $onmbr = "/dev/$boot" eq $b->{boot};
- $b->{boot} = "/dev/$boot" if !$onmbr &&
- $o->ask_from_list_(_("Lilo Installation"),
- _("Where do you want to install the bootloader?"),
- \@l, $l[!$onmbr]) eq $l[0];
- } else {
- $::expert and $o->ask_yesorno('', _("Do you want to use lilo?"), 1) || return;
-
- my @l = (
-_("Boot device") => { val => \$b->{boot}, list => [ map { "/dev/$_->{device}" } @{$o->{hds}}, @{$o->{fstab}} ], not_edit => !$::expert },
-_("Linear (needed for some SCSI drives)") => { val => \$b->{linear}, type => "bool", text => _("linear") },
-_("Compact") => { val => \$b->{compact}, type => "bool", text => _("compact") },
-_("Delay before choosing default choice") => \$b->{timeout},
-_("Video mode") => { val => \$b->{vga}, list => [ keys %lilo::vga_modes ], not_edit => $::beginner },
-_("Password") => { val => \$b->{password}, hidden => 1 },
-_("Restrict command line options") => { val => \$b->{restricted}, type => "bool", text => _("restrict") },
- );
- @l = @l[0..3] if $::beginner;
-
- $b->{vga} ||= 'Normal';
- $o->ask_from_entries_ref('',
- _("Lilo main options"),
- [ grep_index { even($::i) } @l ],
- [ grep_index { odd($::i) } @l ],
- complete => sub {
- $b->{restricted} && !$b->{password} and $o->ask_warn('', _("Option ``Restrict command line options'' is of no use without a password")), return 1;
- 0;
- }
- ) or return;
- $b->{vga} = $lilo::vga_modes{$b->{vga}} || $b->{vga};
- }
-
- until ($::beginner && !$more) {
- my $c = $o->ask_from_list_('',
-_("Here are the following entries in lilo
-You can add some more or change the existent ones."),
- [ (sort @{[map_each { "$::b->{label} ($::a)" . ($b->{default} eq $::b->{label} && " *") } %{$b->{entries}}]}), __("Add"), __("Done") ],
- );
- $c eq "Done" and last;
-
- my $e = {};
- my $name = '';
-
- if ($c ne "Add") {
- ($name) = $c =~ /\((.*?)\)/;
- $e = $b->{entries}{$name};
- }
- my $old_name = $name;
- my $default = my $old_default = $e->{label} eq $b->{default};
-
- my @l;
- if ($e->{type} eq "image") {
- @l = (
-_("Image") => { val => \$name, list => [ eval { glob_("/boot/vmlinuz*") } ] },
-_("Root") => { val => \$e->{root}, list => [ map { "/dev/$_->{device}" } @{$o->{fstab}} ], not_edit => !$::expert },
-_("Append") => \$e->{append},
-_("Initrd") => { val => \$e->{initrd}, list => [ eval { glob_("/boot/initrd*") } ] },
-_("Read-write") => { val => \$e->{'read-write'}, type => 'bool' }
- );
- @l = @l[0..3] if $::beginner;
- } else {
- @l = (
-_("Root") => { val => \$name, list => [ map { "/dev/$_->{device}" } @{$o->{fstab}} ], not_edit => !$::expert },
-_("Table") => { val => \$e->{table}, list => [ map { "/dev/$_->{device}" } @{$o->{hds}} ], not_edit => !$::expert },
-_("Unsafe") => { val => \$e->{unsafe}, type => 'bool' }
- );
- @l = @l[0..1] if $::beginner;
- }
- @l = (
-_("Label") => \$e->{label},
-@l,
-_("Default") => { val => \$default, type => 'bool' },
- );
-
- $o->ask_from_entries_ref('',
- '',
- [ grep_index { even($::i) } @l ],
- [ grep_index { odd($::i) } @l ],
- ) or return;
-
- $b->{default} = $old_default ^ $default ? $default && $e->{label} : $b->{default};
-
- delete $b->{entries}{$old_name};
- $b->{entries}{$name} = $e;
- }
- eval { $o->SUPER::setupBootloader };
- if ($@) {
- $o->ask_warn('',
- [ _("Lilo failed. The following error occured:"),
- grep { !/^Warning:/ } cat_("$o->{prefix}/tmp/.error") ]);
- die "already displayed";
- }
-}
-
-#------------------------------------------------------------------------------
-sub exitInstall {
- my ($o, $alldone) = @_;
-
- return $o->{step} = '' unless $alldone || $o->ask_yesorno('',
-_("Some steps are not completed
-Do you really want to quit now?"), 0);
-
- $o->ask_warn('',
-_("Congratulations, installation is complete.
-Remove the boot media and press return to reboot.
-For information on fixes which are available for this release of Linux Mandrake,
-consult the Errata available from http://www.linux-mandrake.com/.
-Information on configuring your system is available in the post
-install chapter of the Official Linux Mandrake User's Guide.")) if $alldone;
-}
-
-
-#-######################################################################################
-#- Misc Steps Functions
-#-######################################################################################
-sub loadModule {
- my ($o, $type) = @_;
- my @options;
-
- my $l = $o->ask_from_list('',
- _("What %s card have you?", $type),
- [ modules::text_of_type($type) ]) or return;
- my $m = modules::text2driver($l);
-
- my @names = modparm::get_options_name($m);
-
- if ((!defined @names || @names > 0) && $o->ask_from_list('',
-_("In some cases, the %s driver needs to have extra information to work
-properly, although it normally works fine without. Would you like to specify
-extra options for it or allow the driver to probe your machine for the
-information it needs? Occasionally, probing will hang a computer, but it should
-not cause any damage.", $l),
- [ __("Autoprobe"), __("Specify options") ], "Autoprobe") ne "Autoprobe") {
- ASK:
- if (defined @names) {
- my @l = $o->ask_from_entries('',
-_("Here must give the different options for the module %s.", $l),
- \@names) or return;
- @options = modparm::get_options_result($m, @l);
- } else {
- @options = split ' ',
- $o->ask_from_entry('',
-_("Here must give the different options for the module %s.
-Options are in format ``name=value name2=value2 ...''.
-For example you can have ``io=0x300 irq=7''", $l),
- _("Module options:"),
- );
- }
- }
- eval { modules::load($m, $type, @options) };
- if ($@) {
- $o->ask_yesorno('',
-_("Loading of module %s failed
-Do you want to try again with other parameters?", $l), 1) or return;
- goto ASK;
- }
- $l, $m;
-}
-
-#------------------------------------------------------------------------------
-sub load_thiskind {
- my ($o, $type) = @_;
- my $w;
- modules::load_thiskind($type, sub {
- $w = $o->wait_message('',
- [ _("Installing driver for %s card %s", $type, $_->[0]),
- $::beginner ? () : _("(module %s)", $_->[1])
- ]);
- });
-}
-
-#------------------------------------------------------------------------------
-sub setup_thiskind {
- my ($o, $type, $auto, $at_least_one) = @_;
- my @l = $o->load_thiskind($type) unless $::expert && $o->ask_yesorno('', _("Skip %s pci probe", $type), 1);
- return if $auto && (@l || !$at_least_one);
- while (1) {
- my $msg = @l ?
- [ _("Found %s %s interfaces", join(", ", map { $_->[0] } @l), $type),
- _("Do you have another one?") ] :
- _("Do you have an %s interface?", $type);
-
- my $opt = [ __("Yes"), __("No") ];
- push @$opt, __("See hardware info") if $::expert;
- my $r = "Yes";
- $r = $o->ask_from_list_('', $msg, $opt, "No") unless $at_least_one && @l == 0;
- if ($r eq "No") { return }
- elsif ($r eq "Yes") {
- my @r = $o->loadModule($type) or return;
- push @l, \@r;
- } else {
- $o->ask_warn('', [ pci_probing::main::list() ]);
- }
- }
-}
-
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/install_steps_stdio.pm b/perl-install/install_steps_stdio.pm
deleted file mode 100644
index 651f3ba16..000000000
--- a/perl-install/install_steps_stdio.pm
+++ /dev/null
@@ -1,73 +0,0 @@
-package install_steps_stdio;
-
-use diagnostics;
-use strict;
-use vars qw(@ISA);
-
-@ISA = qw(install_steps_interactive interactive_stdio);
-
-use common qw(:common);
-use devices;
-use run_program;
-use interactive_stdio;
-use install_steps_interactive;
-use install_any;
-use log;
-
-1;
-
-sub enteringStep($$$) {
- my ($o, $step) = @_;
- print _("Starting step `%s'\n", $o->{steps}{$step}{text});
-}
-sub leavingStep {
- my ($o) = @_;
- print "--------\n";
-}
-
-sub installPackages {
- my $o = shift;
-
- my $old = \&log::ld;
- local *log::ld = sub {
- my $m = shift;
- if ($m =~ /^starting installing/) {
- my $name = first($_[0] =~ m|([^/]*)-.+?-|);
- print("installing package $name");
- } else { goto $old }
- };
- $o->SUPER::installPackages(@_);
-}
-
-
-sub setRootPassword($) {
- my ($o) = @_;
-
- my (%w);
- do {
- $w{password} and print "You must enter the same password, please try again\n";
- print "Password: "; $w{password} = $o->readln();
- print "Password (again for confirmation): ";
- } until ($w{password} eq $o->readln());
-
- $o->{default}{rootPassword} = $w{password};
- $o->SUPER::setRootPassword;
-}
-
-sub addUser($) {
- my ($o) = @_;
- my %w;
- print "\nCreating a normal user account:\n";
- print "Name: "; $w{name} = $o->readln() or return;
- do {
- $w{password} and print "You must enter the same password, please try again\n";
- print "Password: "; $w{password} = $o->readln();
- print "Password (again for confirmation): ";
- } until ($w{password} eq $o->readln());
- print "Real name: "; $w{realname} = $o->readln();
-
- $w{shell} = $o->ask_from_list('', 'Shell', [ install_any::shells($o) ], "/bin/bash");
-
- $o->{default}{user} = { map { $_ => $w{$_}->get_text } qw(name password realname shell) };
- $o->SUPER::addUser;
-}
diff --git a/perl-install/interactive.pm b/perl-install/interactive.pm
deleted file mode 100644
index ed2c79de4..000000000
--- a/perl-install/interactive.pm
+++ /dev/null
@@ -1,162 +0,0 @@
-package interactive;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :functional);
-
-#- heritate from this class and you'll get all made interactivity for same steps.
-#- for this you need to provide
-#- - ask_from_listW(o, title, messages, arrayref, default) returns one string of arrayref
-#- - ask_many_from_listW(o, title, messages, arrayref, arrayref2) returns many strings of arrayref
-#-
-#- where
-#- - o is the object
-#- - title is a string
-#- - messages is an refarray of strings
-#- - default is an optional string (default is in arrayref)
-#- - arrayref is an arrayref of strings
-#- - arrayref2 contains booleans telling the default state,
-#-
-#- ask_from_list and ask_from_list_ are wrappers around ask_from_biglist and ask_from_smalllist
-#-
-#- ask_from_list_ just translate arrayref before calling ask_from_list and untranslate the result
-#-
-#- ask_from_listW should handle differently small lists and big ones.
-
-
-
-#-######################################################################################
-#- OO Stuff
-#-######################################################################################
-sub new($) {
- my ($type) = @_;
-
- bless {}, ref $type || $type;
-}
-
-
-#-######################################################################################
-#- Interactive functions
-#-######################################################################################
-sub ask_warn($$$) {
- my ($o, $title, $message) = @_;
- ask_from_list2($o, $title, $message, [ _("Ok") ]);
-}
-
-sub ask_yesorno($$$;$) {
- my ($o, $title, $message, $def) = @_;
- ask_from_list2_($o, $title, $message, [ __("Yes"), __("No") ], $def ? "Yes" : "No") eq "Yes";
-}
-
-sub ask_okcancel($$$;$) {
- my ($o, $title, $message, $def) = @_;
- ask_from_list2_($o, $title, $message, [ __("Ok"), __("Cancel") ], $def ? "Ok" : "Cancel") eq "Ok";
-}
-
-sub ask_from_list_ {
- my ($o, $title, $message, $l, $def) = @_;
- @$l == 0 and die '';
- @$l == 1 and return $l->[0];
- goto &ask_from_list2_;
-}
-
-sub ask_from_list {
- my ($o, $title, $message, $l, $def) = @_;
- @$l == 0 and die '';
- @$l == 1 and return $l->[0];
- goto &ask_from_list2;
-}
-
-sub ask_from_list2_($$$$;$) {
- my ($o, $title, $message, $l, $def) = @_;
- untranslate(
- ask_from_list($o, $title, $message, [ map { translate($_) } @$l ], translate($def)),
- @$l);
-}
-
-sub ask_from_list2($$$$;$) {
- my ($o, $title, $message, $l, $def) = @_;
-
- $message = ref $message ? $message : [ $message ];
-
- @$l > 10 and $l = [ sort @$l ];
-
- $o->ask_from_listW($title, $message, $l, $def || $l->[0]);
-}
-sub ask_many_from_list_ref($$$$;$) {
- my ($o, $title, $message, $l, $val) = @_;
-
- $message = ref $message ? $message : [ $message ];
-
- $o->ask_many_from_list_refW($title, $message, $l, $val);
-}
-sub ask_many_from_list($$$$;$) {
- my ($o, $title, $message, $l, $def) = @_;
-
- my $val = [ map { my $i = $_; \$i } @$def ];
-
- $o->ask_many_from_list_ref($title, $message, $l, $val) ?
- [ map { $$_ } @$val ] : undef;
-}
-
-sub ask_from_entry {
- my ($o, $title, $message, $label, $def, %callback) = @_;
-
- $message = ref $message ? $message : [ $message ];
- first ($o->ask_from_entries($title, $message, [ $label ], [ $def ], %callback));
-}
-
-sub ask_from_entries($$$$;$%) {
- my ($o, $title, $message, $l, $def, %callback) = @_;
-
- my $val = [ map { my $i = $_; \$i } @{$def || [('') x @$l]} ];
-
- $o->ask_from_entries_ref($title, $message, $l, $val, %callback) ?
- map { $$_ } @$val :
- undef;
-}
-#- can get a hash of callback: focus_out changed and complete
-#- moreove if you pass a hash with a field list -> combo
-#- if you pass a hash with a field hidden -> emulate stty -echo
-sub ask_from_entries_ref($$$$;$%) {
- my ($o, $title, $message, $l, $val, %callback) = @_;
-
- return unless @$l;
-
- $message = ref $message ? $message : [ $message ];
-
- my $val_hash = [ map {
- if ((ref $_) eq "SCALAR") {
- { val => $_ }
- } else {
- ($_->{list} && (@{$_->{list}} > 1)) ?
- { %$_, type => "list"} : $_;
- }
- } @$val ];
-
- $o->ask_from_entries_refW($title, $message, $l, $val_hash, %callback)
-
-}
-sub wait_message($$$) {
- my ($o, $title, $message) = @_;
-
- $message = ref $message ? $message : [ $message ];
-
- my $w = $o->wait_messageW($title, [ _("Please wait"), @$message ]);
- my $b = before_leaving { $o->wait_message_endW($w) };
-
- #- enable access through set
- common::add_f4before_leaving(sub { $o->wait_message_nextW($_[1], $w) }, $b, 'set');
- $b;
-}
-
-sub kill {}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/keyboard.pm b/perl-install/keyboard.pm
deleted file mode 100644
index 3247f177c..000000000
--- a/perl-install/keyboard.pm
+++ /dev/null
@@ -1,154 +0,0 @@
-
-package keyboard;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :system :file);
-use run_program;
-use install_any;
-use log;
-use c;
-
-
-#-######################################################################################
-#- Globals
-#-######################################################################################
-my $KMAP_MAGIC = 0x8B39C07F;
-
-my %lang2keyboard =
-(
- "en" => "us",
-);
-
-#- [1] = name for loadkeys, [2] = extension for Xmodmap
-my %keyboards = (
-#- armenian xmodmap have to be checked...
-#- "am" => [ __("Armenian"), "am-armscii8", "am" ],
- "be" => [ __("Belgian"), "be-latin1", "be" ],
- "bg" => [ __("Bulgarian"), "bg", "bg" ],
- "cz" => [ __("Czech"), "cz-latin2", "cz" ],
- "de" => [ __("German"), "de-latin1", "de" ],
- "dk" => [ __("Danish"), "dk-latin1", "dk" ],
-"dvorak" => [ __("Dvorak"), "dvorak", "dvorak" ],
- "ee" => [ __("Estonian"), "ee-latin9", "ee" ],
- "es" => [ __("Spanish"), "es-latin1", "es" ],
- "fi" => [ __("Finnish"), "fi-latin1", "fi" ],
- "fr" => [ __("French"), "fr-latin1", "fr" ],
-#- georgian keyboards have to be written...
-#-"ge_ru"=>[__("Georgian (\"Russian\" layout)","ge_ru-georgian_academy","ge_ru"],
-#-"ge_la"=>[__("Georgian ("\Latin\" layout)","ge_la-georgian_academy","ge_ru"],
- "gr" => [ __("Greek"), "gr-8859_7", "gr" ],
- "hu" => [ __("Hungarian"), "hu-latin2", "hu" ],
- "il" => [ __("Israelian"), "il-8859_8", "il" ],
- "is" => [ __("Icelandic"), "is-latin1", "is" ],
- "it" => [ __("Italian"), "it-latin1", "it" ],
- "la" => [ __("Latin American"), "la-latin1", "la" ],
- "nl" => [ __("Dutch"), "nl-latin1", "nl" ],
- "no" => [ __("Norwegian"), "no-latin1", "no" ],
- "pl" => [ __("Polish"), "pl-latin2", "pl" ],
- "pt" => [ __("Portuguese"), "pt-latin1", "pt" ],
- "qc" => [ __("Canadian (Quebec)"), "qc-latin1","qc" ],
- "ru" => [ __("Russian"), "ru-koi8", "ru" ],
- "se" => [ __("Swedish"), "se-latin1", "se" ],
- "sf" => [ __("Swiss (french layout)"), "sf-latin1", "sf" ],
- "sg" => [ __("Swiss (german layout)"), "sg-latin1", "sg" ],
- "si" => [ __("Slovenian"), "si-latin1", "si" ],
- "sk" => [ __("Slovakian"), "sk-latin2", "sk" ],
-#- the xmodmap.th has to be fixed to use tis620 keymaps
-#- "th" => [ __("Thai keyboard"), "th", "th" ],
- "tr_f" => [ __("Turkish (traditional \"F\" model)"), "tr_f-latin5", "tr_f" ],
- "tr_q" => [ __("Turkish (modern \"Q\" model)"), "tr_q-latin5", "tr_q" ],
- "uk" => [ __("UK keyboard"), "uk-latin1", "uk" ],
- "us" => [ __("US keyboard"), "us-latin", "us" ],
- "yu" => [ __("Yugoslavian (latin layout)"), "yu-latin2", "yu" ],
-);
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-sub list { map { $_->[0] } values %keyboards }
-sub xmodmaps { map { $_->[2] } values %keyboards }
-sub keyboard2text { $keyboards{$_[0]} && $keyboards{$_[0]}[0] }
-sub text2keyboard {
- my ($t) = @_;
- while (my ($k, $v) = each %keyboards) {
- lc($v->[0]) eq lc($t) and return $k;
- }
- die "unknown keyboard $t";
-}
-
-sub kmap($) {
- my ($keyboard) = @_;
- ($keyboards{$keyboard} || [])->[1];
-}
-
-sub lang2keyboard($) {
- local ($_) = @_;
- $keyboards{$_} && $_ || $lang2keyboard{$_} || substr($_, 0, 2);
-}
-
-sub load($) {
- my ($keymap) = @_;
-
- my ($magic, @keymaps) = unpack "I i" . c::MAX_NR_KEYMAPS() . "a*", $keymap;
- $keymap = pop @keymaps;
-
- $magic != $KMAP_MAGIC and die "failed to read kmap magic";
-
- local *F;
- sysopen F, "/dev/console", 2 or die "failed to open /dev/console: $!";
-
- my $count = 0;
- foreach (0 .. c::MAX_NR_KEYMAPS() - 1) {
- $keymaps[$_] or next;
-
- my @keymap = unpack "s" . c::NR_KEYS() . "a*", $keymap;
- $keymap = pop @keymap;
-
- my $key = -1;
- foreach my $value (@keymap) {
- $key++;
- c::KTYP($value) != c::KT_SPEC() or next;
- ioctl(F, c::KDSKBENT(), pack("CCS", $_, $key, $value)) or die "keymap ioctl failed ($_ $key $value): $!";
- }
- $count++;
- }
- log::l("loaded $count keymap tables");
-}
-
-sub setup($) {
- my ($keyboard) = @_;
- my $o = $keyboards{$keyboard} or return;
-
- if (my $file = install_any::install_cpio("/usr/share/keymaps", "$o->[1].kmap")) {
- log::l("loading keymap $o->[1]");
- load(cat_($file)) if -e $file;
- }
- if (my $file = install_any::install_cpio("/usr/share/xmodmap", "xmodmap.$o->[2]")) {
- eval { run_program::run('xmodmap', $file) } unless $::testing;
- }
-}
-
-sub write($$) {
- my ($prefix, $keyboard) = @_;
-
- setVarsInSh("$prefix/etc/sysconfig/keyboard", { KEYTABLE => kmap($keyboard) });
-
- run_program::rooted($prefix, "dumpkeys > /etc/sysconfig/console/default.kmap") or die "dumpkeys failed";
-}
-
-sub read($) {
- my ($prefix) = @_;
-
- my %keyf = getVarsFromSh("$prefix/etc/sysconfig/keyboard");
- map { kmap($_) eq $keyf{KEYTABLE} ? $_ : (); } keys %keyboards;
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/lang.pm b/perl-install/lang.pm
deleted file mode 100644
index 724f63f18..000000000
--- a/perl-install/lang.pm
+++ /dev/null
@@ -1,233 +0,0 @@
- package lang;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:file);
-use commands;
-use install_any;
-use log;
-
-#-######################################################################################
-#- Globals
-#-######################################################################################
-#- key (to be used in $LC_ALL), [0] = english name, [1] = charset encoding,
-#- [2] = value for $LANG, [3] = value for LANGUAGE (a list of possible
-#- languages, carefully choosen)
-my %languages = (
- 'en' => [ 'English', undef, 'en', 'en_US' ],
- 'hy' => [ 'Armenian', 'armscii-8', 'hy', 'hy' ],
-'zh_TW.Big5' => [ 'Chinese (Big5)', 'Big5', 'zh_TW.Big5', 'zh_TW.Big5:zh_TW.big5' ],
-'fr_FR' => [ 'French (France)', 'iso-8859-1', 'fr', 'fr_FR' ],
- 'ka' => [ 'Georgian', 'georgian-academy', 'ka', 'ka' ],
-'de_DE' => [ 'German (Germany)', 'iso-8859-1', 'de', 'de_DE' ],
- 'el' => [ 'Greek', 'iso-8859-7', 'el', 'el' ],
- 'hu' => [ 'Hungarian', 'iso-8859-2', 'hu', 'hu' ],
- 'is' => [ 'Icelandic', 'iso-8859-1', 'is', 'is' ],
-#- 'in' was the old code for indonesian language; by putting LANGUAGE=id:in
-#- we catch the few catalog files still using the wrong code
- 'id' => [ 'Indonesian', 'iso-8859-1', 'id', 'id:in' ],
- 'it' => [ 'Italian', 'iso-8859-1', 'it', 'it_IT' ],
- 'ja' => [ 'Japanese', 'jisx0208', 'ja', 'ja_JP.ujis' ],
- 'ko' => [ 'Korean', 'ksc5601', 'ko', 'ko' ],
- 'no' => [ 'Norwegian (Bokmaal)', 'iso-8859-1', 'no', 'no:no@nynorsk' ],
-'no@nynorsk' => [ 'Norwegian (Nynorsk)','iso-8859-1','no', 'no@nynorsk' ],
-'pt_BR' => [ 'Portuguese (Brazil)', 'iso-8859-1', 'pt', 'pt_BR:pt_PT' ],
-'pt_PT' => [ 'Portuguese (Portugal)', 'iso-8859-1', 'pt', 'pt_PT:pt_BR' ],
- 'ro' => [ 'Romanian', 'iso-8859-2', 'ro', 'ro' ],
- 'ru' => [ 'Russian', 'koi8-r', 'ru', 'ru' ],
- 'sk' => [ 'Slovak', 'iso-8859-2', 'sk', 'sk' ],
-'es_ES' => [ 'Spanish (Spain)', 'iso-8859-1', 'es', 'es' ],
- 'tr' => [ 'Turkish', 'iso-8859-9', 'tr', 'tr' ],
- 'uk' => [ 'Ukrainian', 'koi8-u', 'uk', 'uk' ],
- 'vi' => [ 'Vietnamese (TCVN)', 'tcvn', 'vi',
- 'vi_VN.tcvn:vi_VN.tcvn-5712' ],
-'vi_VN.viscii' => [ 'Vietnamese (VISCII)','viscii', 'vi',
- 'vi_VN.viscii:vi_VN.tcvn-viscii1.1-1' ],
- 'wa' => [ 'Walon', 'iso-8859-1', 'wa', 'wa:fr_BE' ],
-);
-
-my %charsets = (
- "armscii-8" => [ "arm8", "armscii8",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-*helv*-medium-r-normal--14-*-*-*-*-armscii-8" ],
-#- chinese needs special console driver for text mode
- "Big5" => [ "?????", "????",
- "*-helvetica-medium-r-normal--14-*-*-*-*-*-iso8859-1," .
- "-taipei-*-medium-r-normal--16-*-*-*-*-*-big5-0" ],
- "iso-8859-1" => [ "lat0-sun16", "iso15",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1" ],
- "iso-8859-2" => [ "lat2-sun16", "iso02",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-2" ],
- "iso-8859-3" => [ "iso03.f16", "iso03",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-3" ],
- "iso-8859-4" => [ "lat4u-16", "iso04",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-4" ],
- "iso-8859-5" => [ "iso05.f16", "iso05",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-5" ],
-#- arabic needs special console driver for text mode [acon]
-#- (and gtk support isn't done yet)
- "iso-8859-6" => [ "iso06.f16", "iso06",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-6" ],
- "iso-8859-7" => [ "iso07.f16", "iso07",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-7" ],
-#- hebrew needs special console driver for text mode (none yet)
-#- (and gtk support isn't done yet)
- "iso-8859-8" => [ "iso08.f16", "iso08",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-8" ],
- "iso-8859-9" => [ "lat5-16", "iso09",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-9" ],
- "iso-8859-15" => [ "lat0-sun16", "iso15",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-15" ],
-#- japanese needs special console driver for text mode [kon2]
- "jisx0208" => [ "????", "????",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "-*-*-medium-r-normal--14-*-*-*-*-*-jisx0208.*-0," .
- "-*-*-medium-r-normal--14-*-*-*-*-*-jisx0201.*-0" ],
- "koi8-r" => [ "Cyr_a8x16", "koi2alt",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-koi8-r" ],
- "koi8-u" => [ "ruscii_8x16", "koi2alt",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-koi8-u" ],
-#- korean needs special console driver for text mode
- "ksc5601" => [ "?????", "?????",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "-*-*-medium-*-*--14-*-*-*-*-*-ksc5601.1987-*" ],
- "tcvn" => [ "tcvn8x16", "tcvn",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-tcvn-5712" ],
- "viscii" => [ "viscii10-8x16", "viscii",
- "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," .
- "*-helvetica-medium-r-normal--14-*-*-*-*-viscii1.1-1" ],
-);
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-
-sub list { map { $_->[0] } values %languages }
-sub lang2text { $languages{$_[0]} && $languages{$_[0]}[0] }
-sub text2lang {
- my ($t) = @_;
- while (my ($k, $v) = each %languages) {
- lc($v->[0]) eq lc($t) and return $k;
- }
- die "unknown language $t";
-}
-
-sub set {
- my ($lang, $prefix) = @_;
-
- if ($lang) {
- $ENV{LC_ALL} = $lang;
- $ENV{LANG} = $languages{$lang}[2];
- $ENV{LANGUAGES} = $languages{$lang}[3];
- } else {
- # stick with the default (English) */
- delete $ENV{LANG};
- delete $ENV{LC_ALL};
- delete $ENV{LINGUAS};
- }
- install_any::install_cpio("/usr/share/locale", $lang);
-}
-
-sub write {
- my ($prefix) = @_;
- my $lang = $ENV{LC_ALL};
-
- $lang or return;
- local *F;
- open F, "> $prefix/etc/sysconfig/i18n" or die "failed to reset $prefix/etc/sysconfig/i18n for writing";
- my $f = sub { $_[1] and print F "$_[0]=$_[1]\n"; };
-
- &$f("LC_ALL", $lang);
- if (my $l = $languages{$lang}) {
- &$f("LANG", $l->[2]);
- &$f("LANGUAGE", $l->[3]);
-
- $l->[1] or return;
- if (my $c = $charsets{$l->[1]}) {
- &$f("SYSFONT", $c->[0]);
- &$f("SYSFONTACM", $c->[1]);
-
- my $p = "$prefix/usr/lib/kbd";
- commands::cp("-f",
- "$p/consolefonts/$c->[0].psf.gz",
- glob_("$p/consoletrans/$c->[1]*"),
- "$prefix/etc/sysconfig/console");
- }
- }
-}
-
-sub load_po($) {
- my ($lang) = @_;
- my ($s, $from, $to, $state, $fuzzy);
-
- $s .= "package po::I18N;\n";
- $s .= "\%$lang = (";
-
- my $f; -e ($f = "$_/po/$lang.po") and last foreach @INC;
- local *F; open F, $f or return;
- foreach (<F>) {
- /^msgstr/ and $state = 1;
- /^msgid/ && !$fuzzy and $state = 2;
-
- if (/^(#|$)/ && $state != 3) {
- $state = 3;
- $s .= qq("$from" => "$to",\n) if $from;
- $from = $to = '';
- }
- $to .= (/"(.*)"/)[0] if $state == 1;
- $from .= (/"(.*)"/)[0] if $state == 2;
-
- $fuzzy = /^#, fuzzy/;
- }
- $s .= ");";
- no strict "vars";
- eval $s;
- !$@;
-}
-
-
-#-sub load_font {
-#- my ($charset) = @_;
-#- my $fontFile = "lat0-sun16";
-#-
-#- if (my $c = $charsets{$charset}) {
-#- log::l("loading $charset font");
-#- $fontFile = $c->[0];
-#- }
-#-
-#- # text mode font
-#- log::l("loading font /usr/share/consolefonts/$fontFile");
-#- #c::loadFont("/tmp/$fontFile") or log::l("error in loadFont: one of PIO_FONT PIO_UNIMAPCLR PIO_UNIMAP PIO_UNISCRNMAP failed: $!");
-#- #print STDERR "\033(K";
-#-
-#-}
-
-#-sub get_x_fontset {
-#- my ($lang) = @_;
-#- my $def = "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1";
-#-
-#- my $l = $languages{$lang} or return $def;
-#- my $c = $charsets{$l->[1]} or return $def;
-#- $c->[2];
-#-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/log.pm b/perl-install/log.pm
deleted file mode 100644
index e29dc410e..000000000
--- a/perl-install/log.pm
+++ /dev/null
@@ -1,47 +0,0 @@
-package log;
-
-use diagnostics;
-use strict;
-
-
-#-#####################################################################################
-#- Globals
-#-#####################################################################################
-my $logOpen = 0;
-my $logDebugMessages = 0;
-
-
-#-######################################################################################
-#- Functions
-#-######################################################################################
-sub fd() { fileno LOG }
-
-sub l {
- $logOpen or openLog();
- print LOG "* ", @_, "\n";
- print LOG2 "* ", @_, "\n";
-}
-sub ld { $logDebugMessages and &l }
-sub w { &l }
-
-sub openLog(;$) {
- if ($::isStandalone) {
- open LOG, ">&STDERR";
- } elsif ($_[0]) { #- useLocal
- open LOG, "> $_[0]";# or die "no log possible :(";
- } else {
- open LOG, "> /dev/tty3" or open LOG, ">> /tmp/install.log";# or die "no log possible :(";
- }
- open LOG2, ">> /tmp/ddebug.log";# or die "no log possible :(";
- select((select(LOG), $| = 1)[0]);
- select((select(LOG2), $| = 1)[0]);
- exists $ENV{DEBUG} and $logDebugMessages = 1;
- $logOpen = 1;
-}
-
-sub closeLog() { close LOG; close LOG2; }
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;
diff --git a/perl-install/modules.pm b/perl-install/modules.pm
deleted file mode 100644
index a829247fc..000000000
--- a/perl-install/modules.pm
+++ /dev/null
@@ -1,324 +0,0 @@
-package modules;
-
-use diagnostics;
-use strict;
-
-use common qw(:common :file);
-use pci_probing::main;
-use detect_devices;
-use run_program;
-use log;
-
-
-my %conf;
-my $scsi = 0;
-my %deps = ();
-
-my @drivers_by_category = (
-[ \&detect_devices::hasEthernet, 'net', 'ethernet', {
- "3c509" => "3com 3c509",
- "3c501" => "3com 3c501",
- "3c503" => "3com 3c503",
- "3c505" => "3com 3c505",
- "3c507" => "3com 3c507",
- "3c515" => "3com 3c515",
- "3c59x" => "3com 3c59x (Vortex)",
- "3c59x" => "3com 3c90x (Boomerang)",
- "at1700" => "Allied Telesis AT1700",
- "ac3200" => "Ansel Communication AC3200",
- "pcnet32" => "AMD PC/Net 32",
- "apricot" => "Apricot 82596",
- "atp" => "ATP",
- "e2100" => "Cabletron E2100",
- "tlan" => "Compaq Netelligent",
- "de4x5" => "Digital 425,434,435,450,500",
- "depca" => "Digital DEPCA and EtherWORKS",
- "ewrk3" => "Digital EtherWORKS 3",
- "tulip" => "Digital 21040 (Tulip)",
- "de600" => "D-Link DE-600 pocket adapter",
- "de620" => "D-Link DE-620 pocket adapter",
- "epic100" => "EPIC 100",
- "hp100" => "HP10/100VG any LAN ",
- "hp" => "HP LAN/AnyLan",
- "hp-plus" => "HP PCLAN/plus",
- "eth16i" => "ICL EtherTeam 16i",
- "eexpress" => "Intel EtherExpress",
- "eepro" => "Intel EtherExpress Pro",
- "eepro100" => "Intel EtherExpress Pro 100",
- "lance" => "Lance",
- "lne390" => "Mylex LNE390",
- "ne" => "NE2000 and compatible",
- "ne2k-pci" => "NE2000 PCI",
- "ne3210" => "NE3210",
- "ni5010" => "NI 5010",
- "ni52" => "NI 5210",
- "ni65" => "NI 6510",
- "rtl8139" => "RealTek RTL8129/8139",
- "es3210" => "Racal-Interlan ES3210",
- "rcpci45" => "RedCreek PCI45 LAN",
- "epic100" => "SMC 83c170 EPIC/100",
- "smc9194" => "SMC 9000 series",
- "smc-ultra" => "SMC Ultra",
- "smc-ultra32" => "SMC Ultra 32",
- "via-rhine" => "VIA Rhine",
- "wd" => "WD8003, WD8013 and compatible",
-}],
-[ \&detect_devices::hasSCSI, 'scsi', undef, {
- "aha152x" => "Adaptec 152x",
- "aha1542" => "Adaptec 1542",
- "aha1740" => "Adaptec 1740",
- "aic7xxx" => "Adaptec 2740, 2840, 2940",
- "advansys" => "AdvanSys Adapters",
- "in2000" => "Always IN2000",
- "AM53C974" => "AMD SCSI",
- "megaraid" => "AMI MegaRAID",
- "BusLogic" => "BusLogic Adapters",
- "cpqarray" => "Compaq Smart-2/P RAID Controller",
- "dtc" => "DTC 3180/3280",
- "eata_dma" => "EATA DMA Adapters",
- "eata_pio" => "EATA PIO Adapters",
- "seagate" => "Future Domain TMC-885, TMC-950",
- "fdomain" => "Future Domain TMC-16x0",
- "gdth" => "ICP Disk Array Controller",
- "ppa" => "Iomega PPA3 (parallel port Zip)",
- "g_NCR5380" => "NCR 5380",
- "NCR53c406a" => "NCR 53c406a",
- "53c7,8xx" => "NCR 53c7xx",
- "ncr53c8xx" => "NCR 53C8xx PCI",
- "pci2000" => "Perceptive Solutions PCI-2000",
- "pas16" => "Pro Audio Spectrum/Studio 16",
- "qlogicfas" => "Qlogic FAS",
- "qlogicisp" => "Qlogic ISP",
- "seagate" => "Seagate ST01/02",
- "t128" => "Trantor T128/T128F/T228",
- "u14-34f" => "UltraStor 14F/34F",
- "ultrastor" => "UltraStor 14F/24F/34F",
- "wd7000" => "Western Digital wd7000",
-}],
-[ undef, 'cdrom', 'none', {
- "sbpcd" => "SoundBlaster/Panasonic",
- "aztcd" => "Aztech CD",
- "bpcd" => "Backpack CDROM",
- "gscd" => "Goldstar R420",
- "mcd" => "Mitsumi",
- "mcdx" => "Mitsumi (alternate)",
- "optcd" => "Optics Storage 8000",
- "cm206" => "Phillips CM206/CM260",
- "sjcd" => "Sanyo",
- "cdu31a" => "Sony CDU-31A",
- "sonycd535" => "Sony CDU-5xx",
-}]
-);
-
-my @drivers_fields = qw(text detect type minor);
-my %drivers = (
- "plip" => [ "PLIP (parallel port)", \&detect_devices::hasPlip, 'net', 'plip' ],
- "ibmtr" => [ "Token Ring", \&detect_devices::hasTokenRing, 'net', 'tr' ],
- "DAC960" => [ "Mylex DAC960", undef, 'scsi', undef ],
- "pcmcia_core" => [ "PCMCIA core support", undef, 'pcmcia', undef ],
- "ds" => [ "PCMCIA card support", undef, 'pcmcia', undef ],
- "i82365" => [ "PCMCIA i82365 controller", undef, 'pcmcia', undef ],
- "tcic" => [ "PCMCIA tcic controller", undef, 'pcmcia', undef ],
- "isofs" => [ "iso9660", undef, 'fs', undef ],
- "nfs" => [ "Network File System (nfs)", undef, 'fs', undef ],
- "smbfs" => [ "Windows SMB", undef, 'fs', undef ],
- "loop" => [ "Loopback device", undef, 'other', undef ],
- "lp" => [ "Parallel Printer", undef, 'other', undef ],
-);
-foreach (@drivers_by_category) {
- my @l = @$_;
- my $l = pop @l;
- foreach (keys %$l) { $drivers{$_} = [ $l->{$_}, @l ]; }
-}
-while (my ($k, $v) = each %drivers) {
- my %l; @l{@drivers_fields} = @$v;
- $drivers{$k} = \%l;
-}
-
-
-1;
-
-
-sub text_of_type($) {
- my ($type) = @_;
-
- map { $_->{text} } grep { $_->{type} eq $type } values %drivers;
-}
-
-sub text2driver($) {
- my ($text) = @_;
- while (my ($k, $v) = each %drivers) {
- $v->{text} eq $text and return $k;
- }
- die "$text is not a valid module description";
-}
-
-
-sub load($;$@) {
- my ($name, $type, @options) = @_;
-
- if ($::testing) {
- print join ",", @options, "\n";
- log::l("i try to install $name module (@options)");
- } else {
- $conf{$name}{loaded} and return;
-
- $type ||= $drivers{$name}{type};
-
- load($_, 'prereq') foreach @{$deps{$name}};
- load_raw($name, @options);
- }
-
- $conf{'scsi_hostadapter' . ($scsi++ || '')}{alias} = $name
- if $type && $type eq 'scsi';
-
- $conf{$name}{options} = join " ", @options if @options;
-}
-
-sub unload($) {
- if ($::testing) {
- log::l("rmmod $_[0]");
- } else {
- run_program::run("rmmod", $_[0]);
- }
-}
-
-sub load_raw($@) {
- my ($name, @options) = @_;
-
- run_program::run("insmod", $name, @options) or die("insmod $name failed");
-
- #- this is a hack to make plip go
- if ($name eq "parport_pc") {
- foreach (@options) {
- /^irq=(\d+)/ or next;
- log::l("writing to /proc/parport/0/irq");
- local *F;
- open F, "> /proc/parport/0/irq" or last;
- print F $1;
- }
- }
- $conf{$name}{loaded} = 1;
-}
-
-sub read_already_loaded() {
- foreach (cat_("/proc/modules", "die")) {
- my ($name) = split;
- $conf{$name}{loaded} = 1;
- }
-}
-
-sub load_deps($) {
- my ($file) = @_;
-
- local *F;
- open F, $file or log::l("error opening $file: $!"), return 0;
- foreach (<F>) {
- my ($f, $deps) = split ':';
- push @{$deps{$f}}, split ' ', $deps;
- }
-}
-
-sub read_conf($;$) {
- my ($file, $scsi) = @_;
- my %c;
-
- foreach (cat_($file)) {
- do {
- $c{$2}{$1} = $3;
- $$scsi = max($$scsi, $1 || 0) if /^\s*alias\s+scsi_hostadapter (\d*)/x && $scsi;
- } if /^\s*(\S+)\s+(\S+)\s+(.*?)\s*$/;
- }
- #- cheating here: not handling aliases of aliases
- while (my ($k, $v) = each %c) {
- $$scsi ||= $v->{scsi_hostadapter} if $scsi;
- if (my $a = $v->{alias}) {
- local $c{$a}{alias};
- add2hash($c{$a}, $v);
- }
- }
- %c;
-}
-
-sub write_conf {
- my ($file) = @_;
- my %written = read_conf($file);
-
- my %net = detect_devices::net2module();
- while (my ($k, $v) = each %net) {
- $conf{$k}{alias} ||= $v;
- }
-
- local *F;
- open F, ">> $file" or die("cannot write module config file $file: $!\n");
-
- while (my ($mod, $h) = each %conf) {
- while (my ($type, $v2) = each %$h) {
- print F "$type $mod $v2\n" if $v2 && $type ne "loaded" && !$written{$mod}{$type};
- }
- }
-}
-
-sub get_stage1_conf {
- %conf = read_conf($_[1], \$scsi);
- add2hash(\%conf, $_[0]);
- $conf{parport_lowlevel}{alias} ||= "parport_pc";
- $conf{pcmcia_core}{"pre-install"} ||= "/etc/rc.d/init.d/pcmcia start";
- $conf{plip}{"pre-install"} ||= "modprobe parport_pc ; echo 7 > /proc/parport/0/irq";
- \%conf;
-}
-
-sub load_thiskind($;&) {
- my ($type, $f) = @_;
-
- my @pcidevs = pci_probing::main::probe($type);
- log::l("pci probe found " . scalar @pcidevs . " $type devices");
-
- my @pcmciadevs = get_pcmcia_devices($type);
- log::l("pcmcia probe found " . scalar @pcmciadevs . " $type devices");
-
- my @devs = (@pcidevs, @pcmciadevs);
-
- my %devs; foreach (@devs) {
- my ($text, $mod) = @$_;
- $devs{$mod}++ and log::l("multiple $mod devices found"), next;
- $drivers{$mod} or log::l("module $mod not in install table"), next;
- log::l("found driver for $mod");
- &$f($text, $mod) if $f;
- load($mod, $type);
- }
- @devs;
-}
-
-sub get_pcmcia_devices($) {
- my ($type) = @_;
- my $file = "/var/run/stab";
- my @devs;
- my $module;
- my $desc;
-
- local *F;
- open F, $file or return; #- no pcmcia is not an error.
- while (<F>) {
- $desc = $1 if /^Socket\s+\d+:\s+(.*)/;
- $module = $1 if /^\d+\s+$type[^\s]*\s+([^\s]+)/;
- if ($desc && $module) {
- push @devs, [ $desc, $module ];
- $desc = $module = undef;
- }
- }
- @devs;
-}
-
-#-#- This assumes only one of each driver type is loaded
-#-sub removeDeviceDriver {
-#- my ($type) = @_;
-#-
-#- my @m = grep { $loaded{$_}{type} eq $type } keys %loaded;
-#- @m or return 0;
-#- @m > 1 and log::l("removeDeviceDriver assume only one of each driver type is loaded, which is not the case (" . join(' ', @m) . ")");
-#- removeModule($m[0]);
-#- 1;
-#-}
-
-
diff --git a/perl-install/mouse.pm b/perl-install/mouse.pm
deleted file mode 100644
index 27979ea8d..000000000
--- a/perl-install/mouse.pm
+++ /dev/null
@@ -1,87 +0,0 @@
-package mouse;
-
-use diagnostics;
-use strict;
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :system :functional);
-use modules;
-use log;
-
-my @mouses_fields = qw(nbuttons device MOUSETYPE XMOUSETYPE FULLNAME);
-my @mouses = (
- [ 0, "none", "none", "Microsoft", __("No Mouse") ],
- [ 2, "ttyS", "pnp", "Auto", __("Microsoft Rev 2.1A or higher (serial)") ],
- [ 3, "ttyS", "logim", "MouseMan", __("Logitech CC Series (serial)") ],
- [ 5, "ttyS", "pnp", "IntelliMouse", __("Logitech MouseMan+/FirstMouse+ (serial)") ],
- [ 5, "ttyS", "ms3", "IntelliMouse", __("ASCII MieMouse (serial)") ],
- [ 5, "ttyS", "ms3", "IntelliMouse", __("Genius NetMouse (serial)") ],
- [ 5, "ttyS", "ms3", "IntelliMouse", __("Microsoft IntelliMouse (serial)") ],
- [ 2, "ttyS", "MMSeries", "MMSeries", __("MM Series (serial)") ],
- [ 2, "ttyS", "MMHitTab", "MMHittab", __("MM HitTablet (serial)") ],
- [ 3, "ttyS", "Logitech", "Logitech", __("Logitech Mouse (serial, old C7 type)") ],
- [ 3, "ttyS", "MouseMan", "MouseMan", __("Logitech MouseMan/FirstMouse (serial)") ],
- [ 2, "ttyS", "Microsoft", "Microsoft", __("Generic Mouse (serial)") ],
- [ 2, "ttyS", "Microsoft", "Microsoft", __("Microsoft compatible (serial)") ],
- [ 3, "ttyS", "Microsoft", "Microsoft", __("Generic 3 Button Mouse (serial)") ],
- [ 2, "ttyS", "MouseSystems", "MouseSystems", __("Mouse Systems (serial)") ],
- [ 2, "psaux", "ps/2", "PS/2", __("Generic Mouse (PS/2)") ],
- [ 3, "psaux", "ps/2", "PS/2", __("Logitech MouseMan/FirstMouse (ps/2)") ],
- [ 3, "psaux", "ps/2", "PS/2", __("Generic 3 Button Mouse (PS/2)") ],
- [ 2, "psaux", "ps/2", "GlidePointPS/2", __("ALPS GlidePoint (PS/2)") ],
- [ 5, "psaux", "ps/2", "MouseManPlusPS/2", __("Logitech MouseMan+/FirstMouse+ (PS/2)") ],
- [ 5, "psaux", "ps/2", "ThinkingMousePS/2", __("Kensington Thinking Mouse (PS/2)") ],
- [ 5, "psaux", "ps/2", "NetMousePS/2", __("ASCII MieMouse (PS/2)") ],
- [ 5, "psaux", "netmouse", "NetMousePS/2", __("Genius NetMouse (PS/2)") ],
- [ 5, "psaux", "netmouse", "NetMousePS/2", __("Genius NetMouse Pro (PS/2)") ],
- [ 5, "psaux", "netmouse", "NetScrollPS/2", __("Genius NetScroll (PS/2)") ],
- [ 5, "psaux", "imps2", "IMPS/2", __("Microsoft IntelliMouse (PS/2)") ],
- [ 2, "atibm", "Busmouse", "BusMouse", __("ATI Bus Mouse") ],
- [ 2, "inportbm", "Busmouse", "BusMouse", __("Microsoft Bus Mouse") ],
- [ 3, "logibm", "Busmouse", "BusMouse", __("Logitech Bus Mouse") ],
-);
-map_index {
- my %l; @l{@mouses_fields} = @$_;
- $mouses[$::i] = \%l;
-} @mouses;
-
-sub names { map { $_->{FULLNAME} } @mouses }
-
-sub name2mouse {
- my ($name) = @_;
- foreach (@mouses) {
- return { %$_ } if $name eq $_->{FULLNAME};
- }
- die "$name not found";
-}
-
-sub serial_ports_names {
- map { "ttyS" . ($_ - 1) . " / COM$_" } 1..4;
-}
-sub serial_ports_names2dev {
- local ($_) = @_;
- /(\w+)/;
-}
-
-sub read($) {
- my ($prefix) = @_;
- my %mouse = getVarsFromSh "$prefix/etc/sysconfig/mouse";
- $mouse{device} = readlink "$prefix/dev/mouse" or log::l("reading $prefix/dev/mouse symlink failed");
- %mouse;
-}
-
-sub write($;$) {
- my ($prefix, $mouse) = @_;
- local $mouse->{FULLNAME} = qq("$mouse->{FULLNAME}");
- setVarsInSh("$prefix/etc/sysconfig/mouse", $mouse, qw(MOUSETYPE XMOUSETYPE FULLNAME XEMU3));
- symlink $mouse->{device}, "$prefix/dev/mouse" or log::l("creating $prefix/dev/mouse symlink failed");
-}
-
-sub detect() {
- my %l;
- eval { modules::load("serial") };
- @l{qw(FULLNAME nbuttons MOUSETYPE XMOUSETYPE device)} = split("\n", `mouseconfig --nointeractive 2>/dev/null`) or die "mouseconfig failed";
- \%l;
-}
diff --git a/perl-install/partition_table.pm b/perl-install/partition_table.pm
deleted file mode 100644
index 9cb2aee6f..000000000
--- a/perl-install/partition_table.pm
+++ /dev/null
@@ -1,488 +0,0 @@
-package partition_table;
-
-use diagnostics;
-use strict;
-use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @important_types @fields2save);
-
-@ISA = qw(Exporter);
-%EXPORT_TAGS = (
- types => [ qw(type2name type2fs name2type fs2type isExtended isExt2 isSwap isDos isWin isPrimary isNfs) ],
-);
-@EXPORT_OK = map { @$_ } values %EXPORT_TAGS;
-
-
-use common qw(:common :system :functional);
-use partition_table_raw;
-use Data::Dumper;
-
-
-@important_types = ("Linux native", "Linux swap", "DOS FAT16", "Win98 FAT32");
-
-@fields2save = qw(primary extended totalsectors);
-
-
-my %types = (
- 0 => "Empty",
- 1 => "DOS 12-bit FAT",
- 2 => "XENIX root",
- 3 => "XENIX usr",
- 4 => "DOS 16-bit <32M",
- 5 => "Extended",
- 6 => "DOS FAT16",
- 7 => "OS/2 HPFS", #- or QNX?
- 8 => "AIX",
- 9 => "AIX bootable",
- 10 => "OS/2 Boot Manager",
- 0xb => "Win98 FAT32 0xb",
- 0xc => "Win98 FAT32",
- 0xe => "Win98 FAT32 0xd",
- 0xf => "Win95 Ext'd (LBA)",
- 0x12 => "Compaq setup",
- 0x40 => "Venix 80286",
- 0x51 => "Novell?",
- 0x52 => "Microport", #- or CPM?
- 0x63 => "GNU HURD", #- or System V/386?
- 0x64 => "Novell Netware 286",
- 0x65 => "Novell Netware 386",
- 0x75 => "PC/IX",
- 0x80 => "Old MINIX", #- Minix 1.4a and earlier
-
- 0x81 => "Linux/MINIX", #- Minix 1.4b and later
- 0x82 => "Linux swap",
- 0x83 => "Linux native",
-
- 0x93 => "Amoeba",
- 0x94 => "Amoeba BBT", #- (bad block table)
- 0xa5 => "BSD/386",
- 0xb7 => "BSDI fs",
- 0xb8 => "BSDI swap",
- 0xc7 => "Syrinx",
- 0xdb => "CP/M", #- or Concurrent DOS?
- 0xe1 => "DOS access",
- 0xe3 => "DOS R/O",
- 0xf2 => "DOS secondary",
- 0xff => "BBT" #- (bad track table)
-);
-
-my %type2fs = (
- 0x01 => 'vfat',
- 0x04 => 'vfat',
- 0x05 => 'ignore',
- 0x06 => 'vfat',
- 0x07 => 'hpfs',
- 0x0b => 'vfat',
- 0x0c => 'vfat',
- 0x0e => 'vfat',
- 0x82 => 'swap',
- 0x83 => 'ext2',
- nfs => 'nfs', #- hack
-);
-my %types_rev = reverse %types;
-my %fs2type = reverse %type2fs;
-
-
-1;
-
-sub important_types { $_[0] and return sort values %types; @important_types }
-
-sub type2name($) { $types{$_[0]} || 'unknown' }
-sub type2fs($) { $type2fs{$_[0]} }
-sub name2type($) { $types_rev{$_[0]} }
-sub fs2type($) { $fs2type{$_[0]} }
-
-sub isExtended($) { $_[0]{type} == 5 || $_[0]{type} == 0xf }
-sub isSwap($) { $type2fs{$_[0]{type}} eq 'swap' }
-sub isExt2($) { $type2fs{$_[0]{type}} eq 'ext2' }
-sub isDos($) { $ {{ 1=>1, 4=>1, 6=>1 }}{$_[0]{type}} }
-sub isWin($) { $ {{ 0xb=>1, 0xc=>1, 0xe=>1 }}{$_[0]{type}} }
-sub isNfs($) { $_[0]{type} eq 'nfs' } #- small hack
-
-sub isPrimary($$) {
- my ($part, $hd) = @_;
- foreach (@{$hd->{primary}{raw}}) { $part eq $_ and return 1; }
- 0;
-}
-
-sub cylinder_size($) {
- my ($hd) = @_;
- $hd->{geom}{sectors} * $hd->{geom}{heads};
-}
-
-sub adjustStart($$) {
- my ($hd, $part) = @_;
- my $end = $part->{start} + $part->{size};
-
- $part->{start} = round_up($part->{start},
- $part->{start} % cylinder_size($hd) < 2 * $hd->{geom}{sectors} ?
- $hd->{geom}{sectors} : cylinder_size($hd));
- $part->{size} = $end - $part->{start};
-}
-sub adjustEnd($$) {
- my ($hd, $part) = @_;
- my $end = $part->{start} + $part->{size};
- my $end2 = round_down($end, cylinder_size($hd));
- unless ($part->{start} < $end2) {
- $end2 = round_up($end, cylinder_size($hd));
- }
- $part->{size} = $end2 - $part->{start};
-}
-sub adjustStartAndEnd($$) {
- &adjustStart;
- &adjustEnd;
-}
-
-sub verifyNotOverlap($$) {
- my ($a, $b) = @_;
- $a->{start} + $a->{size} <= $b->{start} || $b->{start} + $b->{size} <= $a->{start};
-}
-sub verifyInside($$) {
- my ($a, $b) = @_;
- $b->{start} <= $a->{start} && $a->{start} + $a->{size} <= $b->{start} + $b->{size};
-}
-
-sub verifyParts_ {
- foreach my $i (@_) { foreach (@_) {
- $i != $_ and verifyNotOverlap($i, $_) || die "partitions $i->{start} $i->{size} and $_->{start} $_->{size} are overlapping!";
- }}
-}
-sub verifyParts($) {
- my ($hd) = @_;
- verifyParts_(get_normal_parts($hd));
-}
-sub verifyPrimary($) {
- my ($pt) = @_;
- verifyParts_(@{$pt->{normal}}, $pt->{extended});
-}
-
-sub assign_device_numbers($) {
- my ($hd) = @_;
-
- my $i = 1;
- $_->{device} = $hd->{prefix} . $i++ foreach @{$hd->{primary}{raw}},
- map { $_->{normal} } @{$hd->{extended} || []};
-
- #- try to figure what the windobe drive letter could be!
- #
- #- first verify there's at least one primary dos partition, otherwise it
- #- means it is a secondary disk and all will be false :(
- my ($c, @others) = grep { isDos($_) || isWin($_) } @{$hd->{primary}{normal}};
- $c or return;
-
- $i = ord 'D';
- foreach (grep { isDos($_) || isWin($_) } map { $_->{normal} } @{$hd->{extended}}) {
- $_->{device_windobe} = chr($i++);
- }
- $c->{device_windobe} = 'C';
- $_->{device_windobe} = chr($i++) foreach @others;
-}
-
-sub remove_empty_extended($) {
- my ($hd) = @_;
- my $last = $hd->{primary}{extended} or return;
- @{$hd->{extended}} = grep {
- if ($_->{normal}) {
- $last = $_;
- } else {
- %{$last->{extended}} = $_->{extended} ? %{$_->{extended}} : ();
- }
- $_->{normal};
- } @{$hd->{extended}};
- adjust_main_extended($hd);
-}
-
-sub adjust_main_extended($) {
- my ($hd) = @_;
-
- if (!is_empty_array_ref $hd->{extended}) {
- my ($l, @l) = @{$hd->{extended}};
-
- # the first is a special case, must recompute its real size
- my $start = round_down($l->{normal}{start} - 1, $hd->{geom}{sectors});
- my $end = $l->{normal}{start} + $l->{normal}{size};
- foreach (map $_->{normal}, @l) {
- $start = min($start, $_->{start});
- $end = max($end, $_->{start} + $_->{size});
- }
- $l->{start} = $hd->{primary}{extended}{start} = $start;
- $l->{size} = $hd->{primary}{extended}{size} = $end - $start;
- }
- unless (@{$hd->{extended} || []} || !$hd->{primary}{extended}) {
- %{$hd->{primary}{extended}} = (); #- modify the raw entry
- delete $hd->{primary}{extended};
- }
- verifyParts($hd); #- verify everything is all right
-}
-
-
-sub get_normal_parts($) {
- my ($hd) = @_;
-
- @{$hd->{primary}{normal} || []}, map { $_->{normal} } @{$hd->{extended} || []}
-}
-
-
-sub read_one($$) {
- my ($hd, $sector) = @_;
-
- my $pt = partition_table_raw::read($hd, $sector) or return;
-
- my @extended = grep { isExtended($_) } @$pt;
- my @normal = grep { $_->{size} && $_->{type} && !isExtended($_) } @$pt;
-
- @extended > 1 and die "more than one extended partition";
-
- $_->{rootDevice} = $hd->{device} foreach @normal, @extended;
- { raw => $pt, extended => $extended[0], normal => \@normal };
-}
-
-sub read($;$) {
- my ($hd, $clearall) = @_;
- my $pt = $clearall ?
- partition_table_raw::clear_raw() :
- read_one($hd, 0) || return 0;
-
- $hd->{primary} = $pt;
- $hd->{extended} = undef;
- $clearall and return $hd->{isDirty} = $hd->{needKernelReread} = 1;
- verifyPrimary($pt);
-
- eval {
- $pt->{extended} and read_extended($hd, $pt->{extended}) || return 0;
- }; die "extended partition: $@" if $@;
- assign_device_numbers($hd);
- remove_empty_extended($hd);
- 1;
-}
-
-sub read_extended($$) {
- my ($hd, $extended) = @_;
-
- my $pt = read_one($hd, $extended->{start}) or return 0;
- $pt = { %$extended, %$pt };
-
- push @{$hd->{extended}}, $pt;
- @{$hd->{extended}} > 100 and die "oops, seems like we're looping here :( (or you have more than 100 extended partitions!)";
-
- @{$pt->{normal}} <= 1 or die "more than one normal partition in extended partition";
- @{$pt->{normal}} >= 1 or die "no normal partition in extended partition";
- $pt->{normal} = $pt->{normal}[0];
- #- in case of extended partitions, the start sector is local to the partition or to the first extended_part!
- $pt->{normal}{start} += $pt->{start};
-
- verifyInside($pt->{normal}, $extended) or die "partition $pt->{normal}{device} is not inside its extended partition";
-
- if ($pt->{extended}) {
- $pt->{extended}{start} += $hd->{primary}{extended}{start};
- read_extended($hd, $pt->{extended}) or return 0;
- }
- 1;
-}
-
-# write the partition table
-sub write($) {
- my ($hd) = @_;
-
- #- set first primary partition active if no primary partitions are marked as active.
- for ($hd->{primary}{raw}) {
- (grep { $_->{local_start} = $_->{start}; $_->{active} ||= 0 } @$_) or $_->[0]{active} = 0x80;
- }
- partition_table_raw::write($hd, 0, $hd->{primary}{raw}) or die "writing of partition table failed";
-
- foreach (@{$hd->{extended}}) {
- # in case of extended partitions, the start sector must be local to the partition
- $_->{normal}{local_start} = $_->{normal}{start} - $_->{start};
- $_->{extended} and $_->{extended}{local_start} = $_->{extended}{start} - $hd->{primary}{extended}{start};
-
- partition_table_raw::write($hd, $_->{start}, $_->{raw}) or die "writing of partition table failed";
- }
- $hd->{isDirty} = 0;
-
- #- now sync disk and re-read the partition table
- if ($hd->{needKernelReread}) {
- sync();
- partition_table_raw::kernel_read($hd);
- $hd->{needKernelReread} = 0;
- }
-}
-
-sub active($$) {
- my ($hd, $part) = @_;
-
- $_->{active} = 0 foreach @{$hd->{primary}{normal}};
- $part->{active} = 0x80;
-}
-
-
-# remove a normal partition from hard drive hd
-sub remove($$) {
- my ($hd, $part) = @_;
- my $i;
-
- #- first search it in the primary partitions
- $i = 0; foreach (@{$hd->{primary}{normal}}) {
- if ($_ eq $part) {
- splice(@{$hd->{primary}{normal}}, $i, 1);
- %$_ = (); #- blank it
-
- return $hd->{isDirty} = $hd->{needKernelReread} = 1;
- }
- $i++;
- }
- #- otherwise search it in extended partitions
- foreach (@{$hd->{extended}}) {
- $_->{normal} eq $part or next;
-
- delete $_->{normal}; #- remove it
- remove_empty_extended($hd);
-
- return $hd->{isDirty} = $hd->{needKernelReread} = 1;
- }
- 0;
-}
-
-# create of partition at starting at `start', of size `size' and of type `type' (nice comment, uh?)
-sub add_primary($$) {
- my ($hd, $part) = @_;
-
- {
- local $hd->{primary}{normal}; #- save it to fake an addition of $part, that way add_primary do not modify $hd if it fails
- push @{$hd->{primary}{normal}}, $part;
- adjust_main_extended($hd); #- verify
- raw_add($hd->{primary}{raw}, $part);
- }
- push @{$hd->{primary}{normal}}, $part; #- really do it
-}
-
-sub add_extended($$) {
- my ($hd, $part) = @_;
-
- my $e = $hd->{primary}{extended};
-
- if ($e && !verifyInside($part, $e)) {
- #-die "sorry, can't add outside the main extended partition" unless $::unsafe;
- my $end = $e->{start} + $e->{size};
- my $start = min($e->{start}, $part->{start});
- $end = max($end, $part->{start} + $part->{size}) - $start;
-
- { #- faking a resizing of the main extended partition to test for problems
- local $e->{start} = $start;
- local $e->{size} = $end - $start;
- eval { verifyPrimary($hd->{primary}) };
- $@ and die
-_("You have a hole in your partition table but I can't use it.
-The only solution is to move your primary partitions to have the hole next to the extended partitions");
- }
- }
-
- if ($e && $part->{start} < $e->{start}) {
- my $l = first (@{$hd->{extended}});
-
- #- the first is a special case, must recompute its real size
- $l->{start} = round_down($l->{normal}{start} - 1, cylinder_size($hd));
- $l->{size} = $l->{normal}{start} + $l->{normal}{size} - $l->{start};
- my $ext = { %$l };
- unshift @{$hd->{extended}}, { type => 5, raw => [ $part, $ext, {}, {} ], normal => $part, extended => $ext };
- #- size will be autocalculated :)
- } else {
- my ($ext, $ext_size) = is_empty_array_ref($hd->{extended}) ?
- ($hd->{primary}, -1) : #- -1 size will be computed by adjust_main_extended
- (top(@{$hd->{extended}}), $part->{size});
- my %ext = ( type => 5, start => $part->{start}, size => $ext_size );
-
- raw_add($ext->{raw}, \%ext);
- $ext->{extended} = \%ext;
- push @{$hd->{extended}}, { %ext, raw => [ $part, {}, {}, {} ], normal => $part };
- }
- $part->{start}++; $part->{size}--; #- let it start after the extended partition sector
- adjustStartAndEnd($hd, $part);
-
- adjust_main_extended($hd);
-}
-
-sub add($$;$$) {
- my ($hd, $part, $primaryOrExtended, $forceNoAdjust) = @_;
-
- $part->{notFormatted} = 1;
- $part->{isFormatted} = 0;
- $part->{rootDevice} = $hd->{device};
- $hd->{isDirty} = $hd->{needKernelReread} = 1;
- $part->{start} ||= 1; #- starting at sector 0 is not allowed
- adjustStartAndEnd($hd, $part) unless $forceNoAdjust;
-
- my $e = $hd->{primary}{extended};
-
- if ($primaryOrExtended eq 'Primary' ||
- $primaryOrExtended ne 'Extended' && is_empty_array_ref($hd->{primary}{normal})) {
- eval { add_primary($hd, $part) };
- return unless $@;
- }
- eval { add_extended($hd, $part) }; #- try adding extended
- if (my $err = $@) {
- eval { add_primary($hd, $part) };
- die $@ if $@; #- send the add extended error which should be better
- }
-}
-
-# search for the next partition
-sub next($$) {
- my ($hd, $part) = @_;
-
- first(
- sort { $a->{start} <=> $b->{start} }
- grep { $_->{start} >= $part->{start} + $part->{size} }
- get_normal_parts($hd)
- );
-}
-sub next_start($$) {
- my ($hd, $part) = @_;
- my $next = &next($hd, $part);
- $next ? $next->{start} : $hd->{totalsectors};
-}
-
-
-sub raw_add($$) {
- my ($raw, $part) = @_;
-
- foreach (@$raw) {
- $_->{size} || $_->{type} and next;
- $_ = $part;
- return;
- }
- die "raw_add: partition table already full";
-}
-
-sub load($$;$) {
- my ($hd, $file, $force) = @_;
-
- local *F;
- open F, $file or die _("Error reading file %s", $file);
-
- my $h;
- {
- local $/ = "\0";
- eval <F>;
- }
- $@ and die _("Restoring from file %s failed: %s", $file, $@);
-
- ref $h eq 'ARRAY' or die _("Bad backup file");
-
- my %h; @h{@fields2save} = @$h;
-
- $h{totalsectors} == $hd->{totalsectors} or $force or cdie("Bad totalsectors");
-
- #- unsure we don't modify totalsectors
- local $hd->{totalsectors};
-
- @{$hd}{@fields2save} = @$h;
-
- $hd->{isDirty} = $hd->{needKernelReread} = 1;
-}
-
-sub save($$) {
- my ($hd, $file) = @_;
- my @h = @{$hd}{@fields2save};
- local *F;
- open F, ">$file"
- and print F Data::Dumper->Dump([\@h], ['$h']), "\0"
- or die _("Error writing to file %s", $file);
-}
diff --git a/perl-install/perl2etags b/perl-install/perl2etags
deleted file mode 100755
index 7a15bf78c..000000000
--- a/perl-install/perl2etags
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/perl -p
-
-if (/^ / ... !/^ /) {
- ($package) = /(.*).pm,/;
- $package =~ s|/|::|g;
-}
-
-s/(\x7F)sub\s+(\w+)(\([^)]*\))?/$1${package}::$2/;
diff --git a/perl-install/pkgs.pm b/perl-install/pkgs.pm
deleted file mode 100644
index 7adb586fd..000000000
--- a/perl-install/pkgs.pm
+++ /dev/null
@@ -1,353 +0,0 @@
-package pkgs;
-
-use diagnostics;
-use strict;
-use vars qw($fd $size_correction_ratio);
-
-use common qw(:common :file :functional);
-use install_any;
-use log;
-use pkgs;
-use fs;
-use lang;
-use c;
-
-$size_correction_ratio = 1.04;
-
-my @skip_list = qw(
-XFree86-8514 XFree86-AGX XFree86-Mach32 XFree86-Mach64 XFree86-Mach8 XFree86-Mono
-XFree86-P9000 XFree86-S3 XFree86-S3V XFree86-SVGA XFree86-W32 XFree86-I128
-XFree86-Sun XFree86-SunMono XFree86-Sun24 XFree86-3DLabs kernel-BOOT
-MySQL MySQL_GPL mod_php3 midgard postfix metroess metrotmpl
-hackkernel hackkernel-BOOT hackkernel-fb hackkernel-headers
-hackkernel-pcmcia-cs hackkernel-smp hackkernel-smp-fb
-);#)
-
-sub Package {
- my ($packages, $name) = @_;
- $packages->{$name} or log::l("unknown package `$name'") && undef;
-}
-
-sub allpackages {
- my ($packages) = @_;
- my %skip_list; @skip_list{@skip_list} = ();
- grep { !exists $skip_list{$_->{name}} } values %$packages;
-}
-
-sub select($$;$) {
- my ($packages, $p, $base) = @_;
- my ($n, $v);
- $p->{base} ||= $base;
- $p->{selected} = -1; #- selected by user
- my %l; @l{@{$p->{deps} || die "missing deps file"}} = ();
- while (do { my %l = %l; while (($n, $v) = each %l) { last if $v != 1; } $n }) {
- $l{$n} = 1;
- my $i = Package($packages, $n) or next;
- $i->{base} ||= $base;
- $i->{deps} or log::l("missing deps for $n");
- unless ($i->{selected}) {
- $l{$_} ||= 0 foreach @{$i->{deps} || []};
- }
- $i->{selected}++ unless $i->{selected} == -1;
- }
- 1;
-}
-sub unselect($$;$) {
- my ($packages, $p, $size) = @_;
- $p->{base} and return;
- my $set = set_new($p->{name});
- my $l = $set->{list};
-
- #- get the list of provided packages
- foreach my $q (@$l) {
- my $i = Package($packages, $q);
- $i->{selected} && !$i->{base} or next;
- $i->{selected} = 1; #- that way, its counter will be zero the first time
- set_add($set, @{$i->{provides} || []});
- }
- while (@$l) {
- my $n = shift @$l;
- my $i = Package($packages, $n);
-
- $i->{selected} <= 0 || $i->{base} and next;
- if (--$i->{selected} == 0) {
- push @$l, @{$i->{deps} || []} if !$size || ($size -= $i->{size}) > 0;
- }
- }
- return if defined $size && $size <= 0;
-
-# #- garbage collect for circular dependencies
-# my $changed = 0; #1;
-# while ($changed) {
-# $changed = 0;
-# NEXT: foreach my $p (grep { $_->{selected} > 0 && !$_->{base} } values %$packages) {
-# my $set = set_new(@{$p->{provides}});
-# foreach (@{$set->{list}}) {
-# my $q = Package($packages, $_);
-# $q->{selected} == -1 || $q->{base} and next NEXT;
-# set_add($set, @{$q->{provides}}) if $q->{selected};
-# }
-# $p->{selected} = 0;
-# $changed = 1;
-# }
-# }
-}
-sub toggle($$) {
- my ($packages, $p) = @_;
- $p->{selected} ? unselect($packages, $p) : &select($packages, $p);
-}
-sub set($$$) {
- my ($packages, $p, $val) = @_;
- $val ? &select($packages, $p) : unselect($packages, $p);
-}
-
-sub unselect_all($) {
- my ($packages) = @_;
- $_->{selected} = $_->{base} foreach values %$packages;
-}
-
-sub psUsingDirectory() {
- my $dirname = "/tmp/rhimage/Mandrake/RPMS";
- my %packages;
-
- log::l("scanning $dirname for packages");
- foreach (all("$dirname")) {
- my ($name, $version, $release) = /(.*)-([^-]+)-([^-.]+)\.[^.]+\.rpm/ or log::l("skipping $_"), next;
-
- $packages{$name} = {
- name => $name, version => $version, release => $release,
- file => $_, selected => 0, deps => [],
- };
- }
- \%packages;
-}
-
-sub psUsingHdlist() {
- my $f = install_any::getFile('hdlist') or die "no hdlist found";
- my %packages;
-
-# my ($noSeek, $end) = 0;
-# $end = sysseek F, 0, 2 or die "seek failed";
-# sysseek F, 0, 0 or die "seek failed";
-
- while (my $header = c::headerRead(fileno $f, 1)) {
-# or die "error reading header at offset ", sysseek(F, 0, 1);
- my $name = c::headerGetEntry($header, 'name');
-
- $packages{$name} = {
- name => $name, header => $header, selected => 0, deps => [],
- version => c::headerGetEntry($header, 'version'),
- release => c::headerGetEntry($header, 'release'),
- size => c::headerGetEntry($header, 'size'),
- };
- }
- log::l("psUsingHdlist read " . scalar keys(%packages) . " headers");
-
- \%packages;
-}
-
-sub chop_version($) {
- first($_[0] =~ /(.*)-[^-]+-[^-.]+/) || $_[0];
-}
-
-sub getDeps($) {
- my ($packages) = @_;
-
- my $f = install_any::getFile("depslist") or die "can't find dependencies list";
- foreach (<$f>) {
- my ($name, $size, @deps) = split;
- ($name, @deps) = map { chop_version(first(split '\|')) } ($name, @deps); #-TODO better handling of choice
- $packages->{$name} or next;
- $packages->{$name}{size} = $size;
- $packages->{$name}{deps} = \@deps;
- map { push @{$packages->{$_}{provides}}, $name if $packages->{$_} } @deps;
- }
-}
-
-sub readCompss($) {
- my ($packages) = @_;
- my (@compss, $ps);
-
- my $f = install_any::getFile("compss") or die "can't find compss";
- foreach (<$f>) {
- /^\s*$/ || /^#/ and next;
- s/#.*//;
-
- if (/^(\S+)/) {
- $ps = [];
- push @compss, { name => $1, packages => $ps };
- } else {
- /(\S+)/ or log::l("bad line in compss: $_"), next;
- push @$ps, $packages->{$1} || do { log::l("unknown package $1 (in compss)"); next };
- }
- }
- \@compss;
-}
-
-sub readCompssList($) {
- my ($packages, $compss) = @_;
- my %compss; map { $compss{$_->{name}} = $_ } @$compss;
-
- my $f = install_any::getFile("compssList") or die "can't find compssList";
- local $_ = <$f>;
- my $level = [ split ];
-
- my $e;
- foreach (<$f>) {
- /^\s*$/ || /^#/ and next;
-
- /^packages\s*$/ and do { $e = $packages; next };
- /^categories\s*$/ and do { $e = \%compss; next };
-
- my ($name, @values) = split;
-
- $e or log::l("neither packages nor categories");
-
- my $p = $e->{$name} or log::l("unknown entry $name (in compssList)"), next;
- $p->{values} = \@values;
- }
- $level;
-}
-
-sub verif_lang($$) {
- my ($p, $lang) = @_;
- local $SIG{__DIE__} = 'none';
- $p->{options} =~ /l/ or return 1;
- $p->{name} =~ /-([^-]*)$/ or return 1;
- !($1 eq $lang || eval { lang::text2lang($1) eq $lang } && !$@);
-}
-
-sub setShowFromCompss($$$) {
- my ($compss, $install_class, $lang) = @_;
-
- my $l = substr($install_class, 0, 1);
-
- foreach my $c (@$compss) {
- $c->{show} = bool($c->{options} =~ /($l|\*)/);
- foreach my $p (@{$c->{packages}}) {
- local $_ = $p->{options};
- $p->{show} = /$l|\*/ && verif_lang($p, $lang);
- }
- }
-}
-
-sub setSelectedFromCompssList($$$$$) {
- my ($compssListLevels, $packages, $size, $install_class, $lang) = @_;
- my ($level, $ind) = 100;
-
- my @packages = values %$packages;
- my @places = do {
- map_index { $ind = $::i if $_ eq $install_class } @{$compssListLevels};
- defined $ind or log::l("unknown install class $install_class in compssList"), return;
-
- my @values = map { $_->{values}[$ind] } @packages;
- sort { $values[$b] <=> $values[$a] } 0 .. $#packages;
- };
- foreach (@places) {
- my $p = $packages[$_];
- $level = min($level, $p->{values}[$ind]);
- last if $level == 0;
-
- verif_lang($p, $lang) or next;
- &select($packages, $p);
-
- my $nb = 0; foreach (@packages) {
- $nb += $_->{size} if $_->{selected};
- }
- if ($nb > $size) {
- unselect($packages, $p, $nb - $size);
- last;
- }
- }
- $ind, $level;
-}
-
-sub init_db {
- my ($prefix, $isUpgrade) = @_;
-
- my $f = "$prefix/root/install.log";
- open(F, "> $f") ? log::l("opened $f") : log::l("Failed to open $f. No install log will be kept.");
- $fd = fileno(F) || log::fd() || 2;
- c::rpmErrorSetCallback($fd);
-# c::rpmSetVeryVerbose();
-
- log::l("reading /usr/lib/rpm/rpmrc");
- c::rpmReadConfigFiles() or die "can't read rpm config files";
- log::l("\tdone");
-
- $isUpgrade ? c::rpmdbRebuild($prefix) : c::rpmdbInit($prefix, 0644) or die "creation/rebuilding of rpm database failed: ", c::rpmErrorString();
-}
-
-sub getHeader($) {
- my ($p) = @_;
-
- unless ($p->{header}) {
- my $f = install_any::getFile($p->{file}) or die "error opening package $p->{name} (file $p->{file})";
- $p->{header} = c::rpmReadPackageHeader(fileno $f);
- }
- $p->{header};
-}
-
-sub install($$) {
- my ($prefix, $toInstall) = @_;
-
- return if $::g_auto_install;
-
- c::rpmReadConfigFiles() or die "can't read rpm config files";
-
- my $db = c::rpmdbOpen($prefix) or die "error opening RPM database: ", c::rpmErrorString();
- log::l("opened rpm database");
-
- my $trans = c::rpmtransCreateSet($db, $prefix);
-
- my ($total, $nb);
-
- foreach my $p (@$toInstall) {
- eval { getHeader($p) }; $@ and next;
- $p->{file} ||= sprintf "%s-%s-%s.%s.rpm",
- $p->{name}, $p->{version}, $p->{release},
- c::headerGetEntry(getHeader($p), 'arch');
- c::rpmtransAddPackage($trans, getHeader($p), $p->{file}, $p->{name} !~ /kernel/); #- TODO: replace `named kernel' by `provides kernel'
- $nb++;
- $total += $p->{size};
- }
-
- c::rpmdepOrder($trans) or
- cdie "error ordering package list: " . c::rpmErrorString(),
- sub {
- c::rpmdbClose($db);
- c::rpmtransFree($trans);
- };
- c::rpmtransSetScriptFd($trans, $fd);
-
- eval { fs::mount("/proc", "$prefix/proc", "proc", 0) };
-
- log::ld("starting installation: ", $nb, " packages, ", $total, " bytes");
-
- #- !! do not translate these messages, they are used when catched (cf install_steps_graphical)
- my $callbackOpen = sub {
- my $fd = install_any::getFile($_[0]) or log::l("bad file $_[0]");
- $fd ? fileno $fd : -1;
- };
- my $callbackClose = sub { };
- my $callbackStart = sub { log::ld("starting installing package ", $_[0]) };
- my $callbackProgress = sub { log::ld("progressing installation ", $_[0], "/", $_[1]) };
-
- if (my @probs = c::rpmRunTransactions($trans, $callbackOpen, $callbackClose,
- $callbackStart, $callbackProgress, 0)) {
- my %parts;
- @probs = reverse grep {
- if (s/(installing package) .* (needs (?:.*) on the (.*) filesystem)/$1 $2/) {
- $parts{$3} ? 0 : ($parts{$3} = 1);
- } else { 1; }
- } reverse @probs;
- die "installation of rpms failed:\n ", join("\n ", @probs);
- }
- c::rpmtransFree($trans);
- c::rpmdbClose($db);
- log::l("rpm database closed");
-
- $_->{installed} = 1 foreach @$toInstall;
-}
-
-1;
diff --git a/perl-install/resize_fat/Makefile b/perl-install/resize_fat/Makefile
deleted file mode 100644
index 34c257a4e..000000000
--- a/perl-install/resize_fat/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-PRODUCT = libresize
-TARSOURCE = $(PRODUCT).tar.bz2
-
-.PHONY: clean tar
-
-clean:
- rm -f *~ TAGS $(TARSOURCE)
-
-tar: clean
- cp -f ../common.pm .
- cd .. ; tar cfy $(TARSOURCE) $(PRODUCT) ; mv $(TARSOURCE) $(PRODUCT)
- rm -f common.pm
diff --git a/perl-install/resize_fat/README b/perl-install/resize_fat/README
deleted file mode 100644
index 1c4798c82..000000000
--- a/perl-install/resize_fat/README
+++ /dev/null
@@ -1,8 +0,0 @@
-TODO:
-
-resize_fat::fat::update($fs) should be called before doing undoable things
-(before the sync in construct_dir_tree)
-
-BUGS:
-no known bugs :)
-if you found one, please mail pixel@linux-mandrake.com !!
diff --git a/perl-install/resize_fat/any.pm b/perl-install/resize_fat/any.pm
deleted file mode 100644
index 6acd0b52c..000000000
--- a/perl-install/resize_fat/any.pm
+++ /dev/null
@@ -1,82 +0,0 @@
-package resize_fat::any;
-
-use diagnostics;
-use strict;
-use vars qw($FREE $FILE $DIRECTORY);
-
-use common qw(:common :constant);
-use resize_fat::fat;
-use resize_fat::directory;
-use resize_fat::dir_entry;
-
-
-$FREE = 0;
-$FILE = 1;
-$DIRECTORY = 2;
-
-
-1;
-
-
-#- returns the number of clusters for a given filesystem type
-sub min_cluster_count($) {
- my ($fs) = @_;
- (1 << $ {{ FAT16 => 12, FAT32 => 12 }}{$fs->{fs_type}}) - 12;
-}
-sub max_cluster_count($) {
- my ($fs) = @_;
- 2 ** $fs->{fs_type_size} - 11;
-}
-
-
-
-#- calculates the minimum size of a partition, in physical sectors
-sub min_size($) {
- my ($fs) = @_;
- my $count = $fs->{clusters}{count};
-
- #- directories are both in `used' and `dirs', so are counted twice
- #- It's done on purpose since we're moving all directories. So at the worse
- #- moment, 2 directories are there, but that way nothing wrong can happen :)
- my $min_cluster_count = max(2 + $count->{used} + $count->{bad} + $count->{dirs}, min_cluster_count($fs));
-
- $min_cluster_count * divide($fs->{cluster_size}, $SECTORSIZE) +
- divide($fs->{cluster_offset}, $SECTORSIZE);
-}
-#- calculates the maximum size of a partition, in physical sectors
-sub max_size($) {
- my ($fs) = @_;
-
- my $max_cluster_count = min($fs->{nb_fat_entries} - 2, max_cluster_count($fs));
-
- $max_cluster_count * divide($fs->{cluster_size}, $SECTORSIZE) +
- divide($fs->{cluster_offset}, $SECTORSIZE);
-}
-
-#- fills in $fs->{fat_flag_map}.
-#- Each FAT entry is flagged as either FREE, FILE or DIRECTORY.
-sub flag_clusters {
- my ($fs) = @_;
- my ($cluster, $entry, $type);
-
- my $f = sub {
- ($entry) = @_;
- $cluster = resize_fat::dir_entry::get_cluster($entry);
-
- if (resize_fat::dir_entry::is_file($entry)) {
- $type = $FILE;
- } elsif (resize_fat::dir_entry::is_directory($entry)) {
- $type = $DIRECTORY;
- } else { return }
-
- for (; !resize_fat::fat::is_eof($cluster); $cluster = resize_fat::fat::next($fs, $cluster)) {
- $cluster == 0 and die "Bad FAT: unterminated chain for $entry->{name}\n";
- $fs->{fat_flag_map}[$cluster] and die "Bad FAT: cluster $cluster is cross-linked for $entry->{name}\n";
- $fs->{fat_flag_map}[$cluster] = $type;
- $fs->{clusters}{count}{dirs}++ if $type == $DIRECTORY;
- }
- };
- $fs->{fat_flag_map} = [ ($FREE) x ($fs->{nb_clusters} + 2) ];
- $fs->{clusters}{count}{dirs} = 0;
- resize_fat::directory::traverse_all($fs, $f);
-}
diff --git a/perl-install/resize_fat/boot_sector.pm b/perl-install/resize_fat/boot_sector.pm
deleted file mode 100644
index 48e2a8d4e..000000000
--- a/perl-install/resize_fat/boot_sector.pm
+++ /dev/null
@@ -1,107 +0,0 @@
-package resize_fat::boot_sector;
-
-use diagnostics;
-use strict;
-
-use common qw(:common :system :constant);
-use resize_fat::io;
-use resize_fat::any;
-use resize_fat::directory;
-
-
-my $format = "a3 a8 S C S C S S C S S S I I I S S I S S a458 S";
-my @fields = (
- 'boot_jump', #- boot strap short or near jump
- 'system_id', #- Name - can be used to special case partition manager volumes
- 'sector_size', #- bytes per logical sector
- 'cluster_size_in_sectors', #- sectors/cluster
- 'nb_reserved', #- reserved sectors
- 'nb_fats', #- number of FATs
- 'nb_root_dir_entries', #- number of root directory entries
- 'small_nb_sectors', #- number of sectors: big_nb_sectors supersedes
- 'media', #- media code
- 'fat16_fat_length', #- sectors/FAT for FAT12/16
- 'sectors_per_track',
- 'nb_heads',
- 'nb_hidden', #- (unused)
- 'big_nb_sectors', #- number of sectors (if small_nb_sectors == 0)
-
-#- FAT32-only entries
- 'fat32_fat_length', #- size of FAT in sectors
- 'fat32_flags', #- bit8: fat mirroring,
- #- low4: active fat
- 'fat32_version', #- minor * 256 + major
- 'fat32_root_dir_cluster',
- 'info_offset_in_sectors',
- 'fat32_backup_sector',
-
-#- Common again...
- 'boot_code', #- Boot code (or message)
- 'boot_sign', #- 0xAA55
-);
-
-1;
-
-
-#- trimfs_init_boot_sector() - reads in the boot sector - gets important info out
-#- of boot sector, and puts in main structure - performs sanity checks - returns 1
-#- on success, 0 on failureparameters: filesystem an empty structure to fill.
-sub read($) {
- my ($fs) = @_;
-
- my $boot = eval { resize_fat::io::read($fs, 0, $SECTORSIZE) }; $@ and die "reading boot sector failed on device $fs->{fs_name}";
- @{$fs}{@fields} = unpack $format, $boot;
-
- $fs->{nb_sectors} = $fs->{small_nb_sectors} || $fs->{big_nb_sectors};
- $fs->{cluster_size} = $fs->{cluster_size_in_sectors} * $fs->{sector_size};
-
- $fs->{boot_sign} == 0xAA55 or die "Invalid signature for a MS-based filesystem.";
- $fs->{nb_fats} == 2 or die "Weird number of FATs: $fs->{nb_fats}, not 2.",
- $fs->{nb_sectors} < 32 and die "Too few sectors for viable file system\n";
-
- if ($fs->{fat16_fat_length}) {
- #- asserting FAT16, will be verified later on
- $fs->{fs_type} = 'FAT16';
- $fs->{fs_type_size} = 16;
- $fs->{fat_length} = $fs->{fat16_fat_length};
- $resize_fat::bad_cluster_value = 0xfff7; #- 2**16 - 1
- } else {
- $resize_fat::isFAT32 = 1;
- $fs->{fs_type} = 'FAT32';
- $fs->{fs_type_size} = 32;
- $fs->{fat_length} = $fs->{fat32_fat_length};
-
- $fs->{nb_root_dir_entries} = 0;
- $fs->{info_offset} = $fs->{info_offset_in_sectors} * $fs->{sector_size};
- $resize_fat::bad_cluster_value = 0xffffff7;
- }
-
- $fs->{fat_offset} = $fs->{nb_reserved} * $fs->{sector_size};
- $fs->{fat_size} = $fs->{fat_length} * $fs->{sector_size};
- $fs->{root_dir_offset} = $fs->{fat_offset} + $fs->{fat_size} * $fs->{nb_fats};
- $fs->{root_dir_size} = $fs->{nb_root_dir_entries} * resize_fat::directory::entry_size();
- $fs->{cluster_offset} = $fs->{root_dir_offset} + $fs->{root_dir_size} - 2 * $fs->{cluster_size};
-
- $fs->{nb_fat_entries} = divide($fs->{fat_size}, $fs->{fs_type_size} / 8);
-
- #- - 2 because clusters 0 & 1 doesn't exist
- $fs->{nb_clusters} = divide($fs->{nb_sectors} * $fs->{sector_size} - $fs->{cluster_offset}, $fs->{cluster_size}) - 2;
-
- $fs->{dir_entries_per_cluster} = divide($fs->{cluster_size}, psizeof($format));
-
-#- $fs->{nb_clusters} >= resize_fat::any::min_cluster_count($fs) or die "error: not enough sectors for a $fs->{fs_type}\n";
- $fs->{nb_clusters} < resize_fat::any::max_cluster_count($fs) or die "error: too many sectors for a $fs->{fs_type}\n";
-}
-
-sub write($) {
- my ($fs) = @_;
- my $boot = pack($format, @{$fs}{@fields});
-
- eval { resize_fat::io::write($fs, 0, $SECTORSIZE, $boot) }; $@ and die "writing the boot sector failed on device $fs->{fs_name}";
-
- if ($resize_fat::isFAT32) {
- #- write backup
- eval { resize_fat::io::write($fs, $fs->{fat32_backup_sector} * $SECTORSIZE, $SECTORSIZE, $boot) };
- $@ and die "writing the backup boot sector (#$fs->{fat32_backup_sector}) failed on device $fs->{fs_name}";
- }
-}
diff --git a/perl-install/resize_fat/dir_entry.pm b/perl-install/resize_fat/dir_entry.pm
deleted file mode 100644
index cfee23dae..000000000
--- a/perl-install/resize_fat/dir_entry.pm
+++ /dev/null
@@ -1,72 +0,0 @@
-package resize_fat::dir_entry;
-
-use diagnostics;
-use strict;
-
-
-my $DELETED_FLAG = 0xe5;
-my $VOLUME_LABEL_ATTR = 0x08;
-my $VFAT_ATTR = 0x0f;
-my $DIRECTORY_ATTR = 0x10;
-
-1;
-
-sub get_cluster($) {
- my ($entry) = @_;
- $entry->{first_cluster} + ($resize_fat::isFAT32 ? $entry->{first_cluster_high} * 65536 : 0);
-}
-sub set_cluster($$) {
- my ($entry, $val) = @_;
- $entry->{first_cluster} = $val & (1 << 16) - 1;
- $entry->{first_cluster_high} = $val >> 16 if $resize_fat::isFAT32;
-}
-
-sub is_directory_raw($) {
- my ($entry) = @_;
- !is_special_entry($entry) && $entry->{attributes} & $DIRECTORY_ATTR;
-}
-
-sub is_directory($) {
- my ($entry) = @_;
- is_directory_raw($entry) && $entry->{name} !~ /^\.\.? /;
-}
-
-sub is_volume($) {
- my ($entry) = @_;
- !is_special_entry($entry) && $entry->{attributes} & $VOLUME_LABEL_ATTR;
-}
-
-sub is_file($) {
- my ($entry) = @_;
- !is_special_entry($entry) && !is_directory($entry) && !is_volume($entry) && $entry->{length};
-}
-
-
-sub is_special_entry($) {
- my ($entry) = @_;
- my ($c) = unpack "C", $entry->{name};
-
- #- skip empty slots, deleted files, and 0xF6?? (taken from kernel)
- $c == 0 || $c == $DELETED_FLAG || $c == 0xF6 and return 1;
-
- $entry->{attributes} == $VFAT_ATTR and return 1;
- 0;
-}
-
-
-#- return true if entry has been modified
-sub remap {
- my ($fat_remap, $entry) = @_;
-
- is_special_entry($entry) and return;
-
- my $cluster = get_cluster($entry);
- my $new_cluster = $fat_remap->[$cluster];
-
- #-print "remapping cluster ", get_first_cluster($fs, $entry), " to $new_cluster";
-
- $new_cluster == $cluster and return; #- no need to modify
-
- set_cluster($entry, $new_cluster);
- 1;
-}
diff --git a/perl-install/resize_fat/directory.pm b/perl-install/resize_fat/directory.pm
deleted file mode 100644
index 46e810021..000000000
--- a/perl-install/resize_fat/directory.pm
+++ /dev/null
@@ -1,78 +0,0 @@
-package resize_fat::directory;
-
-use diagnostics;
-use strict;
-
-use common qw(:system);
-use resize_fat::dir_entry;
-use resize_fat::io;
-
-
-my $format = "a8 a3 C C C S7 I";
-my @fields = (
- 'name',
- 'extension',
- 'attributes',
- 'is_upper_case_name',
- 'creation_time_low', #- milliseconds
- 'creation_time_high',
- 'creation_date',
- 'access_date',
- 'first_cluster_high', #- for FAT32
- 'time',
- 'date',
- 'first_cluster',
- 'length',
-);
-
-1;
-
-sub entry_size { psizeof($format) }
-
-#- call `f' for each entry of the directory
-#- if f return true, then modification in the entry are taken back
-sub traverse($$$) {
- my ($fs, $directory, $f) = @_;
-
- for (my $i = 0;; $i++) {
- my $raw = \substr($directory, $i * psizeof($format), psizeof($format));
-
- #- empty entry means end of directory
- $$raw =~ /^\0*$/ and return $directory;
-
- my $entry; @{$entry}{@fields} = unpack $format, $$raw;
-
- &$f($entry)
- and $$raw = pack $format, @{$entry}{@fields};
- }
- $directory;
-}
-
-sub traverse_all($$) {
- my ($fs, $f) = @_;
-
- my $traverse_all; $traverse_all = sub {
- my ($entry) = @_;
-
- &$f($entry);
-
- resize_fat::dir_entry::is_directory($entry)
- and traverse($fs, resize_fat::io::read_file($fs, resize_fat::dir_entry::get_cluster($entry)), $traverse_all);
-
- undef; #- no need to write back (cf traverse)
- };
-
- my $directory = $resize_fat::isFAT32 ?
- resize_fat::io::read_file($fs, $fs->{fat32_root_dir_cluster}) :
- resize_fat::io::read($fs, $fs->{root_dir_offset}, $fs->{root_dir_size});
- traverse($fs, $directory, $traverse_all);
-}
-
-
-#- function used by construct_dir_tree to translate the `cluster' fields in each
-#- directory entry
-sub remap {
- my ($fs, $directory) = @_;
-
- traverse($fs->{fat_remap}, $directory, sub { resize_fat::dir_entry::remap($fs->{fat_remap}, $_[0]) });
-}
diff --git a/perl-install/resize_fat/fat.pm b/perl-install/resize_fat/fat.pm
deleted file mode 100644
index e6039077a..000000000
--- a/perl-install/resize_fat/fat.pm
+++ /dev/null
@@ -1,167 +0,0 @@
-package resize_fat::fat;
-
-use diagnostics;
-use strict;
-
-use resize_fat::any;
-use resize_fat::io;
-
-1;
-
-sub read($) {
- my ($fs) = @_;
-
- @{$fs->{fats}} = map {
- my $fat = eval { resize_fat::io::read($fs, $fs->{fat_offset} + $_ * $fs->{fat_size}, $fs->{fat_size}) };
- $@ and die "reading fat #$_ failed";
- vec($fat, 0, 8) == $fs->{media} or die "FAT $_ has invalid signature";
- $fat;
- } (0 .. $fs->{nb_fats} - 1);
-
- $fs->{fat} = $fs->{fats}[0];
-
- my ($free, $bad, $used) = (0, 0, 0);
-
- for (my $i = 2; $i < $fs->{nb_clusters} + 2; $i++) {
- my $cluster = &next($fs, $i);
- if ($cluster == 0) { $free++; }
- elsif ($cluster == $resize_fat::bad_cluster_value) { $bad++; }
- else { $used++; }
- }
- @{$fs->{clusters}{count}}{qw(free bad used)} = ($free, $bad, $used);
-}
-
-sub write($) {
- my ($fs) = @_;
-
- sysseek $fs->{fd}, $fs->{fat_offset}, 0 or die "write_fat: seek failed";
- foreach (1..$fs->{nb_fats}) {
- syswrite $fs->{fd}, $fs->{fat} or die "write_fat: write failed";
- }
-}
-
-
-
-#- allocates where all the clusters will be moved to. Clusters before cut_point
-#- remain in the same position, however cluster that are part of a directory are
-#- moved regardless (this is a mechanism to prevent data loss) (cut_point is the
-#- first cluster that won't occur in the new fs)
-sub allocate_remap {
- my ($fs, $cut_point) = @_;
- my ($cluster, $new_cluster);
- my $remap = sub { $fs->{fat_remap}[$cluster] = $new_cluster; };
- my $get_new = sub {
- $new_cluster = get_free($fs);
- 0 < $new_cluster && $new_cluster < $cut_point or die "no free clusters";
- set_eof($fs, $new_cluster); #- mark as used
- #-log::ld("resize_fat: [$cluster,", &next($fs, $cluster), "...]->$new_cluster...");
- };
-
- $fs->{fat_remap}[0] = 0;
- $fs->{last_free_cluster} = 2;
- for ($cluster = 2; $cluster < $fs->{nb_clusters} + 2; $cluster++) {
- if ($cluster < $cut_point) {
- if ($fs->{fat_flag_map}[$cluster] == $resize_fat::any::DIRECTORY) {
- &$get_new();
- } else {
- $new_cluster = $cluster;
- }
- &$remap();
- } elsif (!is_empty(&next($fs, $cluster))) {
- &$get_new();
- &$remap();
- }
- }
-}
-
-
-#- updates the fat for the resized filesystem
-sub update {
- my ($fs) = @_;
-
- for (my $cluster = 2; $cluster < $fs->{nb_clusters} + 2; $cluster++) {
- if ($fs->{fat_flag_map}[$cluster]) {
- my $old_next = &next($fs, $cluster);
- my $new = $fs->{fat_remap}[$cluster];
- my $new_next = $fs->{fat_remap}[$old_next];
-
- set_available($fs, $cluster);
-
- is_eof($old_next) ?
- set_eof($fs, $new) :
- set_next($fs, $new, $new_next);
- }
- }
-}
-
-
-#- - compares the two FATs (one's a backup that should match) - skips first entry
-#- - its just a signature (already checked above) NOTE: checks for cross-linking
-#- are done in count.c
-sub check($) {
- my ($fs) = @_;
- foreach (@{$fs->{fats}}) {
- $_ eq $fs->{fats}[0] or die "FAT tables do not match";
- }
-}
-
-sub endianness16($) { (($_[0] & 0xff) << 8) + ($_[0] >> 8); }
-sub endianness($$) {
- my ($val, $nb_bits) = @_;
- my $r = 0;
- for (; $nb_bits > 0; $nb_bits -= 8) {
- $r <<= 8;
- $r += $val & 0xff;
- $val >>= 8;
- }
- $nb_bits < 0 and die "error: endianness only handle numbers divisible by 8";
- $r;
-}
-
-sub next($$) {
- my ($fs, $cluster) = @_;
- $cluster > $fs->{nb_clusters} + 2 and die "fat::next: cluster $cluster outside filesystem";
- endianness(vec($fs->{fat}, $cluster, $fs->{fs_type_size}), $fs->{fs_type_size});
-
-}
-sub set_next($$$) {
- my ($fs, $cluster, $new_v) = @_;
- $cluster > $fs->{nb_clusters} + 2 and die "fat::set_next: cluster $cluster outside filesystem";
- vec($fs->{fat}, $cluster, $fs->{fs_type_size}) = endianness($new_v, $fs->{fs_type_size});
-}
-
-
-sub get_free($) {
- my ($fs) = @_;
- foreach (my $i = 0; $i < $fs->{nb_clusters}; $i++) {
- my $cluster = ($i + $fs->{last_free_cluster} - 2) % $fs->{nb_clusters} + 2;
- is_available(&next($fs, $cluster)) and return $fs->{last_free_cluster} = $cluster;
- }
- die "no free clusters";
-}
-
-#- returns true if <cluster> represents an EOF marker
-sub is_eof($) {
- my ($cluster) = @_;
- $cluster >= $resize_fat::bad_cluster_value;
-}
-sub set_eof($$) {
- my ($fs, $cluster) = @_;
- set_next($fs, $cluster, $resize_fat::bad_cluster_value + 1);
-}
-
-#- returns true if <cluster> is empty. Note that this includes bad clusters.
-sub is_empty($) {
- my ($cluster) = @_;
- $cluster == 0 || $cluster == $resize_fat::bad_cluster_value;
-}
-
-#- returns true if <cluster> is available.
-sub is_available($) {
- my ($cluster) = @_;
- $cluster == 0;
-}
-sub set_available($$) {
- my ($fs, $cluster) = @_;
- set_next($fs, $cluster, 0);
-}
diff --git a/perl-install/resize_fat/info_sector.pm b/perl-install/resize_fat/info_sector.pm
deleted file mode 100644
index 3a6f7cfed..000000000
--- a/perl-install/resize_fat/info_sector.pm
+++ /dev/null
@@ -1,36 +0,0 @@
-package resize_fat::info_sector;
-
-use diagnostics;
-use strict;
-
-use common qw(:system);
-use resize_fat::io;
-
-my $format = "a484 I I I a16";
-my @fields = (
- 'unused',
- 'signature', #- should be 0x61417272
- 'free_clusters', #- -1 for unknown
- 'next_cluster', #- most recently allocated cluster
- 'unused2',
-);
-
-1;
-
-
-sub read($) {
- my ($fs) = @_;
- my $info = resize_fat::io::read($fs, $fs->{info_offset}, psizeof($format));
- @{$fs->{info_sector}}{@fields} = unpack $format, $info;
- $fs->{info_sector}{signature} == 0x61417272 or die "Invalid information sector signature\n";
-}
-
-sub write($) {
- my ($fs) = @_;
- $fs->{info_sector}{free_clusters} = $fs->{clusters}->{count}->{free};
- $fs->{info_sector}{next_cluster} = 2;
-
- my $info = pack $format, @{$fs->{info_sector}}{@fields};
-
- resize_fat::io::write($fs, $fs->{info_offset}, psizeof($format), $info);
-}
diff --git a/perl-install/resize_fat/io.pm b/perl-install/resize_fat/io.pm
deleted file mode 100644
index 48309db91..000000000
--- a/perl-install/resize_fat/io.pm
+++ /dev/null
@@ -1,74 +0,0 @@
-package resize_fat::io;
-
-use diagnostics;
-use strict;
-
-use resize_fat::fat;
-
-1;
-
-
-sub read($$$) {
- my ($fs, $pos, $size) = @_;
- my $buf;
- sysseek $fs->{fd}, $pos, 0 or die "seeking to byte #$pos failed on device $fs->{fs_name}";
- sysread $fs->{fd}, $buf, $size or die "reading at byte #$pos failed on device $fs->{fs_name}";
- $buf;
-}
-sub write($$$$) {
- my ($fs, $pos, $size, $buf) = @_;
- sysseek $fs->{fd}, $pos, 0 or die "seeking to byte #$pos failed on device $fs->{fs_name}";
- syswrite $fs->{fd}, $buf or die "writing at byte #$pos failed on device $fs->{fs_name}";
-}
-
-sub read_cluster($$) {
- my ($fs, $cluster) = @_;
- my $buf;
-
- eval {
- $buf = &read($fs,
- $fs->{cluster_offset} + $cluster * $fs->{cluster_size},
- $fs->{cluster_size});
- }; @$ and die "reading cluster #$cluster failed on device $fs->{fs_name}";
- $buf;
-}
-sub write_cluster($$$) {
- my ($fs, $cluster, $buf) = @_;
-
- eval {
- &write($fs,
- $fs->{cluster_offset} + $cluster * $fs->{cluster_size},
- $fs->{cluster_size},
- $buf);
- }; @$ and die "writing cluster #$cluster failed on device $fs->{fs_name}";
-}
-
-sub read_file($$) {
- my ($fs, $cluster) = @_;
- my $buf = '';
-
- for (; !resize_fat::fat::is_eof($cluster); $cluster = resize_fat::fat::next($fs, $cluster)) {
- $cluster == 0 and die "Bad FAT: unterminated chain\n";
- $buf .= read_cluster($fs, $cluster);
- }
- $buf;
-}
-
-sub check_mounted($) {
- my ($f) = @_;
-
- local *F;
- open F, "/proc/mounts" or die "error opening /proc/mounts\n";
- foreach (<F>) {
- /^$f\s/ and die "device is mounted";
- }
-}
-
-sub open($) {
- my ($fs) = @_;
-
- check_mounted($fs->{device});
-
- sysopen F, $fs->{fs_name}, 2 or sysopen F, $fs->{fs_name}, 0 or die "error opening device $fs->{fs_name} for writing\n";
- $fs->{fd} = \*F;
-}
diff --git a/perl-install/resize_fat/main.pm b/perl-install/resize_fat/main.pm
deleted file mode 100644
index 1e5ac62be..000000000
--- a/perl-install/resize_fat/main.pm
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/perl
-
-# DiskDrake
-# Copyright (C) 1999 MandrakeSoft (pixel@linux-mandrake.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# This is mainly a perl rewrite of the work of Andrew Clausen (libresize)
-
-package resize_fat::main;
-
-use diagnostics;
-use strict;
-
-use log;
-use common qw(:common :system :constant);
-use resize_fat::boot_sector;
-use resize_fat::info_sector;
-use resize_fat::directory;
-use resize_fat::io;
-use resize_fat::fat;
-use resize_fat::any;
-
-
-1;
-
-#- - reads in the boot sector/partition info., and tries to make some sense of it
-sub new($$$) {
- my ($type, $device, $fs_name) = @_;
- my $fs = { device => $device, fs_name => $fs_name } ;
-
- resize_fat::io::open($fs);
- resize_fat::boot_sector::read($fs);
- $resize_fat::isFAT32 and eval { resize_fat::info_sector::read($fs) };
- resize_fat::fat::read($fs);
- resize_fat::fat::check($fs);
- resize_fat::any::flag_clusters($fs);
-
- bless $fs, $type;
-}
-
-#- copy all clusters >= <start_cluster> to a new place on the partition, less
-#- than <start_cluster>. Only copies files, not directories.
-#- (use of buffer needed because the seeks slow like hell the hard drive)
-sub copy_clusters {
- my ($fs, $cluster) = @_;
- my @buffer;
- my $flush = sub {
- while (@buffer) {
- my $cluster = shift @buffer;
- resize_fat::io::write_cluster($fs, $cluster, shift @buffer);
- }
- };
- for (; $cluster < $fs->{nb_clusters} + 2; $cluster++) {
- $fs->{fat_flag_map}[$cluster] == $resize_fat::any::FILE or next;
- push @buffer, $fs->{fat_remap}[$cluster], resize_fat::io::read_cluster($fs, $cluster);
- @buffer > 50 and &$flush();
- }
- &$flush();
-}
-
-#- Constructs the new directory tree to match the new file locations.
-sub construct_dir_tree {
- my ($fs) = @_;
-
- if ($resize_fat::isFAT32) {
- #- fat32's root must remain in the first 64k clusters
- #- so don't set it as DIRECTORY, it will be specially handled
- $fs->{fat_flag_map}[$fs->{fat32_root_dir_cluster}] = $resize_fat::any::FREE;
- }
-
- for (my $cluster = 2; $cluster < $fs->{nb_clusters} + 2; $cluster++) {
- $fs->{fat_flag_map}[$cluster] == $resize_fat::any::DIRECTORY or next;
-
- resize_fat::io::write_cluster($fs,
- $fs->{fat_remap}[$cluster],
- resize_fat::directory::remap($fs, resize_fat::io::read_cluster($fs, $cluster)));
- }
-
- sync();
-
- #- until now, only free clusters have been written. it's a null operation if we stop here.
- #- it means no corruption :)
- #
- #- now we must be as fast as possible!
-
- #- remapping non movable root directory
- if ($resize_fat::isFAT32) {
- my $cluster = $fs->{fat32_root_dir_cluster};
-
- resize_fat::io::write_cluster($fs,
- $fs->{fat_remap}[$cluster],
- resize_fat::directory::remap($fs, resize_fat::io::read_cluster($fs, $cluster)));
- } else {
- resize_fat::io::write($fs, $fs->{root_dir_offset}, $fs->{root_dir_size},
- resize_fat::directory::remap($fs, resize_fat::io::read($fs, $fs->{root_dir_offset}, $fs->{root_dir_size})));
- }
-}
-
-sub min_size($) { &resize_fat::any::min_size }
-sub max_size($) { &resize_fat::any::max_size }
-
-#- resize
-#- - size is in sectors
-#- - checks boundaries before starting
-#- - copies all data beyond new_cluster_count behind the frontier
-sub resize {
- my ($fs, $size) = @_;
-
- my ($min, $max) = (min_size($fs), max_size($fs));
-
-
- $size += $min if $size =~ /^\+/;
-
- $size >= $min or die "Minimum filesystem size is $min sectors";
- $size <= $max or die "Maximum filesystem size is $max sectors";
-
- log::l("resize_fat: Partition size fill be ", $size * $SECTORSIZE >> 20, "Mb (well exactly ${size} sectors)");
-
- my $new_data_size = $size * $SECTORSIZE - $fs->{cluster_offset};
- my $new_nb_clusters = divide($new_data_size, $fs->{cluster_size});
-
- log::l("resize_fat: Allocating new clusters");
- resize_fat::fat::allocate_remap($fs, $new_nb_clusters);
-
- log::l("resize_fat: Copying files");
- copy_clusters($fs, $new_nb_clusters);
-
- log::l("resize_fat: Copying directories");
- construct_dir_tree($fs);
-
- log::l("Writing new FAT...");
- resize_fat::fat::update($fs);
- resize_fat::fat::write($fs);
-
- $fs->{nb_sectors} = $size;
- $fs->{nb_clusters} = $new_nb_clusters;
- $fs->{clusters}{count}->{free} =
- $fs->{nb_clusters} - $fs->{clusters}{count}->{used} - $fs->{clusters}->{count}->{bad} - 2;
-
- $fs->{system_id} = 'was here!';
- $fs->{small_nb_sectors} = 0;
- $fs->{big_nb_sectors} = $size;
-
- log::l("resize_fat: Writing new boot sector...");
-
- resize_fat::boot_sector::write($fs);
-
- $resize_fat::isFAT32 and eval { resize_fat::info_sector::write($fs) }; #- doesn't matter if this fails - its pretty useless!
-
- sync();
- log::l("resize_fat: done");
-}
-
diff --git a/perl-install/run_program.pm b/perl-install/run_program.pm
deleted file mode 100644
index 7e91437e7..000000000
--- a/perl-install/run_program.pm
+++ /dev/null
@@ -1,55 +0,0 @@
-package run_program;
-
-use diagnostics;
-use strict;
-
-use log;
-
-1;
-
-sub run($@) { rooted('', @_) }
-
-sub rooted {
- my ($root, $name, @args) = @_;
- my $str = ref $name ? $name->[0] : $name;
- log::l("running: $str @args" . ($root ? " with root $root" : ""));
- $root ? $root .= '/' : ($root = '');
-
- fork and wait, return $? == 0;
- {
- my ($stdout, $stdoutm, $stderr, $stderrm);
- ($stdoutm, $stdout, @args) = @args if $args[0] =~ /^>>?$/;
- ($stderrm, $stderr, @args) = @args if $args[0] =~ /^2>>?$/;
-
- open STDIN, "/dev/null" or die "can't open /dev/null as stdin";
-
- if ($stderr) {
- $stderrm =~ s/2//;
- open STDERR, "$stderrm $root$stderr" or die "run_program can't output in $root$stderr (mode `$stderrm')";
- } else {
- open STDERR, ">> /dev/tty7" or open STDERR, ">> /tmp/exec.log" or die "run_program can't log :(";
- }
- if ($stdout) {
- open STDOUT, "$stdoutm $root$stdout" or die "run_program can't output in $root$stdout (mode `$stdoutm')";
- } else {
- open STDOUT, ">> /dev/tty7" or open STDOUT, ">> /tmp/exec.log" or die "run_program can't log :(";
- }
-
- $root and chroot $root;
- chdir "/";
-
- if (ref $name) {
- unless (exec { $name->[0] } $name->[1], @args) {
- log::l("exec of $name->[0] failed: $!");
- exec('false') or exit(1);
- }
- } else {
- unless (exec $name, @args) {
- log::l("exec of $name failed: $!");
- exec('false') or exit(1);
- }
-
- }
- }
-
-}
diff --git a/perl-install/share/diskdrake.rc b/perl-install/share/diskdrake.rc
deleted file mode 100644
index e92a089b4..000000000
--- a/perl-install/share/diskdrake.rc
+++ /dev/null
@@ -1,30 +0,0 @@
-style "font"
-{
- font = "-adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso8859-1"
-}
-
-style "red" = "font"
-{
- bg[NORMAL] = { 1.0, 0, 0 }
- bg[PRELIGHT] = { 0.9, 0, 0 }
-}
-style "green" = "font"
-{
- bg[NORMAL] = { 0, 1.0, 0 }
- bg[PRELIGHT] = { 0, 0.9, 0 }
-}
-style "blue" = "font"
-{
- bg[NORMAL] = { 0, 0, 1.0 }
- bg[PRELIGHT] = { 0, 0, 0.9 }
-}
-style "white" = "font"
-{
- bg[NORMAL] = { 1.0, 1.0, 1.0 }
- bg[PRELIGHT] = { 0.67, 0.67, 0.67 }
-}
-
-widget "*Linux*" style "red"
-widget "*Linux swap" style "green"
-widget "*FAT*" style "blue"
-widget "*Empty*" style "white"
diff --git a/perl-install/share/po/Makefile b/perl-install/share/po/Makefile
deleted file mode 100644
index ad4f9486b..000000000
--- a/perl-install/share/po/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-PMSFILES = $(shell find .. -name "*.pm" | grep -v "^../po" | grep -v "^../c/")
-PMSCFILES = $(PMSFILES:%=%_.c)
-POFILES = $(shell ls *.po)
-
-all: $(POFILES)
-
-clean:
- rm -f empty.po $(POFILES:%=%t) $(PMSCFILES)
-
-$(POFILES): panoramix.pot
- cp -f $@ $@t
- msgmerge $@t $< > $@
- rm $@t
-
-panoramix.pot: $(PMSFILES)
- $(MAKE) $(PMSCFILES);
- xgettext -F -n --keyword=_ --keyword=__ -o panoramix.pot $(PMSCFILES)
- rm $(PMSCFILES)
-
-$(PMSCFILES): %_.c: %
- perl -pe 's|^(__?\()| $$1|; s|#(.*)|/*\1*\/|; s|$$|\\n\\|' $< > $@
-
diff --git a/perl-install/share/themes-blue.rc b/perl-install/share/themes-blue.rc
deleted file mode 100644
index ab2344f8b..000000000
--- a/perl-install/share/themes-blue.rc
+++ /dev/null
@@ -1,47 +0,0 @@
-style "any"
-{
- base[NORMAL] = { 0, 0, 0.67 }
- bg[NORMAL] = { 0, 0, 0.67 }
- bg[INSENSITIVE] = { 0, 0, 0.67 }
- base[INSENSITIVE]={ 0, 0, 0.67 }
- bg[ACTIVE] = { 0, 0.67, 1.0 }
- bg[PRELIGHT] = { 0, 0, 1.0 }
-
- text[NORMAL] = { 1.0, 1.0, 1.0 }
- fg[NORMAL] = { 1.0, 1.0, 1.0 }
- fg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
- text[INSENSITIVE]={ 1.0, 1.0, 1.0 }
- fg[ACTIVE] = { 1.0, 1.0, 1.0 }
- fg[PRELIGHT] = { 1.0, 1.0, 1.0 }
-}
-
-style "entry"
-{
- base[NORMAL] = { 0, 1.0, 1.0 }
- base[ACTIVE] = { 0, 1.0, 1.0 }
- fg[NORMAL] = { 0.67, 0, 0.67 }
-
- bg[SELECTED] = { 1.0, 1.0, 1.0 }
- fg[SELECTED] = { 0, 0, 1.0 }
-}
-
-style "button" = "any"
-{
- bg[NORMAL] = { 0, 0, 1.0 }
- fg[NORMAL] = { 1.0, 1.0, 1.0 }
- bg[PRELIGHT] = { 0, 0, 1.0 }
- fg[PRELIGHT] = { 0, 1.0, 1.0 }
-}
-
-style "background"
-{
- bg[NORMAL] = { 0, 0, 0.67 }
- bg[PRELIGHT] = { 0, 0, 0.67 }
-}
-
-widget_class "*" style "any"
-widget_class "*GtkSpin*" style "entry"
-widget_class "*GtkEntry*" style "entry"
-widget_class "*Gtk*List*" style "entry"
-widget "*GtkButton*" style "button"
-widget "*background*" style "background"
diff --git a/perl-install/timezone.pm b/perl-install/timezone.pm
deleted file mode 100644
index e5851b1dd..000000000
--- a/perl-install/timezone.pm
+++ /dev/null
@@ -1,80 +0,0 @@
-package timezone;
-
-use diagnostics;
-use strict;
-
-use common qw(:common :system);
-use commands;
-use log;
-
-
-sub getTimeZones {
- my ($prefix) = @_;
- local *F;
- open F, "cd $prefix/usr/share/zoneinfo && find [A-Z]* -type f |";
- my @l = sort map { chop; $_ } <F>;
- close F or die "cannot list the available zoneinfos";
- @l;
-}
-
-sub read ($) {
- my ($f) = @_;
- my %t = getVarsFromSh($f) or die "cannot open file $f: $!";
-
- ("timezone", $t{ZONE}, "GMT", text2bool($t{GMT}));
-}
-
-sub write($$$) {
- my ($prefix, $t, $f) = @_;
-
- eval { commands::cp("-f", "$prefix/usr/share/zoneinfo/$t->{timezone}", "$prefix/etc/localtime") };
- $@ and log::l("installing /etc/localtime failed");
- setVarsInSh($f, {
- ZONE => $t->{timezone},
- GMT => bool2text($t->{GMT}),
- ARC => "false",
- });
-}
-
-my %l2t = (
-'Danish (Denmark)' => 'Europe/Copenhagen',
-'English (USA)' => 'America/New_York',
-'English (UK)' => 'Europe/London',
-'Estonian (Estonia)' => 'Europe/Tallinn',
-'Finnish (Finland)' => 'Europe/Helsinki',
-'French (France)' => 'Europe/Paris',
-'French (Belgium)' => 'Europe/Brussels',
-'French (Canada)' => 'Canada/Atlantic', # or Newfoundland ? or Eastern ?
-'German (Germany)' => 'Europe/Berlin',
-'Hungarian (Hungary)' => 'Europe/Budapest',
-'Icelandic (Iceland)' => 'Atlantic/Reykjavik',
-'Indonesian (Indonesia)' => 'Asia/Jakarta',
-'Italian (Italy)' => 'Europe/Rome',
-'Italian (San Marino)' => 'Europe/San_Marino',
-'Italian (Vatican)' => 'Europe/Vatican',
-'Italian (Switzerland)' => 'Europe/Zurich',
-'Japanese' => 'Asia/Tokyo',
-'Latvian (Latvia)' => 'Europe/Riga',
-'Lithuanian (Lithuania)' => 'Europe/Vilnius',
-'Norwegian (Bokmaal)' => 'Europe/Oslo',
-'Norwegian (Nynorsk)' => 'Europe/Oslo',
-'Polish (Poland)' => 'Europe/Warsaw',
-'Portuguese (Brazil)' => 'Brazil/East', # most people live on the east coast
-'Portuguese (Portugal)' => 'Europe/Lisbon',
-'Romanian (Rumania)' => 'Europe/Bucharest',
-'Russian (Russia)' => 'Europe/Moscow',
-'Slovak (Slovakia)' => 'Europe/Bratislava',
-'Spanish (Spain)' => 'Europe/Madrid',
-'Swedish (Finland)' => 'Europe/Helsinki',
-'Swedish (Sweden)' => 'Europe/Stockholm',
-'Turkish (Turkey)' => 'Europe/Istanbul',
-'Ukrainian (Ukraine)' => 'Europe/Kiev',
-'Walon (Belgium)' => 'Europe/Brussels',
-);
-
-sub bestTimezone {
- my ($langtext) = @_;
- $l2t{common::bestMatchSentence($langtext, keys %l2t)};
-}
-
-1;
diff --git a/perl-install/unused/.cvsignore b/perl-install/unused/.cvsignore
deleted file mode 100644
index 72e8ffc0d..000000000
--- a/perl-install/unused/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/perl-install/unused/cdrom.pm b/perl-install/unused/cdrom.pm
deleted file mode 100644
index b9b6ea699..000000000
--- a/perl-install/unused/cdrom.pm
+++ /dev/null
@@ -1,41 +0,0 @@
-package cdrom;
-
-use diagnostics;
-use strict;
-
-use detect_devices;
-
-
-my %transTable = ( cm206 => 'cm206cd', sonycd535 => 'cdu535');
-
-1;
-
-
-sub setupCDdevicePanel {
- my ($type) = @_;
-}
-
-sub findAtapi {
- my $ide = ideGetDevices();
- foreach (@$ide) { $_->{type} eq 'cdrom' and return $_->{device} }
- error();
-}
-
-sub findSCSIcdrom {
- detect_devices::isSCSI() or return error();
- my $scsi = detect_devices::getSCSI();
- foreach (@$scsi) { $_->{type} eq 'cdrom' and return $_->{device} }
- error();
-}
-
-sub setupCDdevice {
- my ($cddev, $dl) = @_;
- #-TODO
-}
-
-sub removeCDmodule {
- #- this wil fail silently if no CD module has been loaded
- removeDeviceDriver('cdrom');
- 1;
-}
-
diff --git a/perl-install/unused/dns.pm b/perl-install/unused/dns.pm
deleted file mode 100644
index 5e6bb5f5b..000000000
--- a/perl-install/unused/dns.pm
+++ /dev/null
@@ -1,64 +0,0 @@
-use diagnostics;
-use strict;
-
-# This is dumb, but glibc doesn't like to do hostname lookups w/o libc.so
-
-
-#TODO TODO
-sub doQuery {
-# my ($query, $queryType, $domainName, $ipNum) = @_;
-#
-# _res.retry = 2;
-#
-# len = res_search(query, C_IN, queryType, (void *) &response,
-# sizeof(response));
-# if (len <= 0) return -1;
-#
-# if (ntohs(response.hdr.rcode) != NOERROR) return -1;
-# ancount = ntohs(response.hdr.ancount);
-# if (ancount < 1) return -1;
-#
-# data = response.buf + sizeof(HEADER);
-# end = response.buf + len;
-#
-# # skip the question
-# data += dn_skipname(data, end) + QFIXEDSZ;
-#
-# # parse the answer(s)
-# while (--ancount >= 0 && data < end) {
-#
-# # skip the domain name portion of the RR record
-# data += dn_skipname(data, end);
-#
-# # get RR information
-# GETSHORT(type, data);
-# data += INT16SZ; # skipp class
-# data += INT32SZ; # skipp TTL
-# GETSHORT(len, data);
-#
-# if (type == T_PTR) {
-# # we got a pointer
-# len = dn_expand(response.buf, end, data, name, sizeof(name));
-# if (len <= 0) return -1;
-# if (queryType == T_PTR && domainName) {
-# # we wanted a pointer
-# *domainName = malloc(strlen(name) + 1);
-# strcpy(*domainName, name);
-# return 0;
-# }
-# } else if (type == T_A) {
-# # we got an address
-# if (queryType == T_A && ipNum) {
-# # we wanted an address
-# memcpy(ipNum, data, sizeof(*ipNum));
-# return 0;
-# }
-# }
-#
-# # move ahead to next RR
-# data += len;
-# }
-#
-# return -1;
-}
-
diff --git a/perl-install/unused/otherinsmod.pm b/perl-install/unused/otherinsmod.pm
deleted file mode 100644
index 1a8eee9ff..000000000
--- a/perl-install/unused/otherinsmod.pm
+++ /dev/null
@@ -1,26 +0,0 @@
-use diagnostics;
-use strict;
-
-sub insmod {
-
- @_ or die "usage: insmod <module>.o [params]\n";
-
- my $file = shift;
- my $tmpname;
-
- unless (-r $file) {
- local *F;
- open F, "/modules/modules.cgz" or die "error opening /modules/modules.cgz";
-
- $tmpname = "/tmp/" . basename($file);
-
- installCpioFile(\*F, $file, $tmpname, 0) or die "error extracting file";
- }
-
- my $rc = insmod_main($tmpname || $file, @_);
-
- unlink($tmpname);
-
- return $rc;
-}
-sub modprobe { &insmod }
diff --git a/perl-install/unused/scsi.pm b/perl-install/unused/scsi.pm
deleted file mode 100644
index b92185d46..000000000
--- a/perl-install/unused/scsi.pm
+++ /dev/null
@@ -1,104 +0,0 @@
-use diagnostics;
-use strict;
-
-my $scsiDeviceAvailable;
-my $CSADeviceAvailable;
-
-1;
-
-sub scsiDeviceAvailable {
- defined $scsiDeviceAvailable and return $scsiDeviceAvailable;
- local *F;
- open F, "/proc/scsi/scsi" or log::l("failed to open /proc/scsi/scsi: $!"), return 0;
- foreach (<F>) {
- /devices: none/ and log::l("no scsi devices are available"), return $scsiDeviceAvailable = 0;
- }
- log::l("scsi devices are available");
- $scsiDeviceAvailable = 1;
-}
-
-sub CompaqSmartArrayDeviceAvailable {
- defined $CSADeviceAvailable and return $CSADeviceAvailable;
- -r "/proc/array/ida0" or log::l("failed to open /proc/array/ida0: $!"), return $CSADeviceAvailable = 0;
- log::l("Compaq Smart Array controllers available");
- $CSADeviceAvailable = 1;
-}
-
-sub scsiGetDevices {
- my @drives;
- my ($driveNum, $cdromNum, $tapeNum) = qw(0 0 0);
- my $err = sub { chop; log::l("unexpected line in /proc/scsi/scsi: $_"); error() };
- local $_;
-
- local *F;
- open F, "/proc/scsi/scsi" or return &$err();
- $_ = <F>; /^Attached devices:/ or return &$err();
- while ($_ = <F>) {
- my ($id) = /^Host:.*?Id: (\d+)/ or return &$err();
- $_ = <F>; my ($vendor, $model) = /^\s*Vendor:\s*(.*?)\s+Model:\s*(.*?)\s+Rev:/ or return &$err();
- $_ = <F>; my ($type) = /^\s*Type:\s*(.*)/ or &$err();
- my $device;
- if ($type =~ /Direct-Access/) {
- $type = 'hd';
- $device = "sd" . chr($driveNum++ + ord('a'));
- } elsif ($type =~ /Sequential-Access/) {
- $type = 'tape';
- $device = "st" . $tapeNum++;
- } elsif ($type =~ /CD-ROM/) {
- $type = 'cdrom';
- $device = "scd" . $cdromNum++;
- }
- $device and push @drives, { device => $device, type => $type, info => "$vendor $model", id => $id, bus => 0 };
- }
- [ @drives ];
-}
-
-sub ideGetDevices {
- my @idi;
-
- -r "/proc/ide" or die "sorry, /proc/ide not available, seems like you have a pre-2.2 kernel\n => not handled yet :(";
-
- #- Great. 2.2 kernel, things are much easier and less error prone.
- foreach my $d (glob_('/proc/ide/hd*')) {
- my ($t) = chop_(cat_("$d/media"));
- my $type = $ {{disk => 'hd', cdrom => 'cdrom', tape => 'tape', floppy => 'fd'}}{$t} or next;
- my ($info) = chop_(cat_("$d/model")); $info ||= "(none)";
-
- my $num = ord (($d =~ /(.)$/)[0]) - ord 'a';
- push @idi, { type => $type, device => basename($d), info => $info, bus => $num/2, id => $num%2 };
- }
- [ @idi ];
-}
-
-
-sub CompaqSmartArrayGetDevices {
- my @idi;
- my $f;
-
- for (my $i = 0; -r ($f = "/proc/array/ida$i"); $i++) {
- local *F;
- open F, $f or die;
- local $_ = <F>;
- my ($name) = m|ida/(.*?):| or next;
- push @idi, { device => $name, info => "Compaq RAID logical disk", type => 'hd' };
- }
- [ @idi ];
-}
-
-sub dac960GetDevices {
- my @idi;
- my $file = "/var/log/dmesg";
- -r $file or $file = "/tmp/syslog";
-
- local *F;
- open F, $file or die "Failed to open $file: $!";
-
- #- We are looking for lines of this format:DAC960#0:
- #- /dev/rd/c0d0: RAID-7, Online, 17928192 blocks, Write Thru0123456790123456789012
- foreach (<F>) {
- my ($devicename, $info) = m|/dev/rd/(.*?): (.*?),| or next;
- push @idi, { info => $info, type => 'hd', devicename => $devicename };
- log::l("DAC960: $devicename: $info");
- }
- [ @idi ];
-}
diff --git a/perl-install/verify_c b/perl-install/verify_c
deleted file mode 100755
index a306348dd..000000000
--- a/perl-install/verify_c
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/perl -n
-
-/^#/ and next;
-/c::(\w+)/ and push @c, [ $1, $ARGV, $. ] ;
-
-eof && close ARGV;
-
-END {
- $_ = join '', `cat c/c.xs.pm`;
- foreach $c (@c) {
- /$c->[0]/ or $err = print "$c->[1]:$c->[2]: $c->[0] not in c.xs\n";
- }
- exit $err;
-}