diff options
-rwxr-xr-x | config-db/slxconfig | 183 | ||||
-rwxr-xr-x | config-db/slxconfig-demuxer | 245 | ||||
-rwxr-xr-x | config-db/slxsettings | 102 | ||||
-rwxr-xr-x | installer/slxos-export | 71 | ||||
-rwxr-xr-x | installer/slxos-setup | 50 |
5 files changed, 276 insertions, 375 deletions
diff --git a/config-db/slxconfig b/config-db/slxconfig index bea096fd..8b2b2eca 100755 --- a/config-db/slxconfig +++ b/config-db/slxconfig @@ -539,36 +539,13 @@ __END__ =head1 NAME -slxconfig - OpenSLX-script to configure a vendor-OS for use with -OpenSLX. You can create systems that will use the specified vendor-OS -and you can create clients for that system, too. +slxconfig - OpenSLX-script to view & change the configurational database =head1 SYNOPSIS slxconfig [options] <action> <key-value-pairs> -=head3 OpenSLX Options - - --base-path=<string> basic path to project files - --bin-path=<string> path to binaries and scripts - --config-path=<string> path to configuration files - --db-basepath=<string> basic path to openslx database - --db-datadir=<string> data folder created under db-basepath - --db-name=<string> name of database - --db-spec=<string> full DBI-specification of database - --db-type=<string> type of database to connect to - --export-path=<string> path to root of all exported filesystems - --locale=<string> locale to use for translations - --logfile=<string> file to write logging output to - --private-path=<string> path to private data - --public-path=<string> path to public (client-accesible) data - --share-path=<string> path to sharable data - --stage1-path=<string> path to stage1 systems - --temp-path=<string> path to temporary data - --tftpboot-path=<string> path to root of tftp-server - --verbose-level=<int> level of logging verbosity (0-3) - -=head3 General Options +=head3 Options --help brief help message --man show full documentation @@ -624,128 +601,13 @@ removes a system from the config-DB =back -=head1 OPTIONS - -=head3 OpenSLX Options - -=over 8 - -=item B<< --base-path=<string> >> - -Sets basic path to project files. - -Default is $SLX_BASE_PATH (usually F</opt/openslx>). - -=item B<< --bin-path=<string> >> - -Sets path to binaries and scripts. - -Default is $SLX_BASE_PATH/bin (usually F</opt/openslx/bin>). - -=item B<< --config-path=<string> >> - -Sets path to configuration files. - -Default is $SLX_CONFIG_PATH (usually F</etc/opt/openslx>). - -=item B<< --db-basepath=<string> >> - -Sets basic path to openslx database. - -Default is $SLX_DB_PATH (usually F</var/opt/openslx/db>). - -=item B<< --db-datadir=<string> >> - -Sets data folder created under db-basepath. - -Default is $SLX_DB_DATADIR (usually empty as it depends on db-type -whether or not such a directory is required at all). - -=item B<< --db-name=<string> >> - -Gives the name of the database to connect to. - -Default is $SLX_DB_NAME (usually C<openslx>). - -=item B<< --db-spec=<string> >> - -Gives the full DBI-specification of database to connect to. Content depends -on the db-type. - -Default is $SLX_DB_SPEC (usually empty as it will be built automatically). - -=item B<< --db-type=<string> >> - -Sets the type of database to connect to (CSV, SQLite, mysql, ...). - -Default $SLX_DB_TYPE (usually C<CSV>). - -=item B<< --export-path=<string> >> - -Sets path to root of all exported filesystems. For each type of export (NFS, -NBD, ...) a separate folder will be created in here. - -Default is $SLX_EXPORT_PATH (usually F</srv/openslx/export>. - -=item B<< --locale=<string> >> +=head1 DESCRIPTION -Sets the locale to use for translations. +B<slxconfig> can be used to view the contents of the configurational database. +Additionally, you can add systems as well as clients and change their specific +boot configuration. -Defaults to the system's standard locale. - -=item B<< --logfile=<string> >> - -Specifies a file where logging output will be written to. - -Default is to log to STDERR. - -=item B<< --private-path=<string> >> - -Sets path to private data, where the config-db, vendor_oses and configurational -extensions will be stored. - -Default is $SLX_PRIVATE_PATH (usually F</var/opt/openslx>. - -=item B<< --public-path=<string> >> - -Sets path to public (client-accesible) data. - -Default is $SLX_PUBLIC_PATH (usually F</srv/openslx>. - -=item B<< --share-path=<string> >> - -Sets path to sharable data, where distro-specs and functionality templates -will be stored. - -Default is $SLX_SHARE_PATH (usually F</opt/openslx/share>. - -=item B<< --stage1-path=<string> >> - -Sets path to stage1 systems, where distributor-systems will be installed. - -Default is $SLX_STAGE1_PATH (usually F</var/opt/openslx/stage1>. - -=item B<< --temp-path=<string> >> - -Sets path to temporary data. - -Default is $SLX_TEMP_PATH (usually F</tmp>. - -=item B<< --tftpboot-path=<string> >> - -Sets path to root of tftp-server from which clients will access their files. - -Default is $SLX_TFTPBOOT_PATH (usually F</srv/openslx/tftpboot>. - -=item B<< --verbose-level=<int> >> - -Sets the level of logging verbosity (0-3). - -Default is $SLX_VERBOSE_LEVEL (usually 0, no logging). - -=back - -=head3 General Options +=head1 OPTIONS =over 8 @@ -896,4 +758,35 @@ removes the system/client with the given name. =back +=head1 SEE ALSO + +slxsettings, slxos-setup, slxos-export, slxconfig-demuxer + +=head1 GENERAL OPENSLX OPTIONS + +Being a part of OpenSLX, this script supports several other options +which can be used to overrule the OpenSLX settings: + + --base-path=<string> basic path to project files + --bin-path=<string> path to binaries and scripts + --config-path=<string> path to configuration files + --db-basepath=<string> basic path to openslx database + --db-datadir=<string> data folder created under db-basepath + --db-name=<string> name of database + --db-spec=<string> full DBI-specification of database + --db-type=<string> type of database to connect to + --export-path=<string> path to root of all exported filesystems + --locale=<string> locale to use for translations + --logfile=<string> file to write logging output to + --private-path=<string> path to private data + --public-path=<string> path to public (client-accesible) data + --share-path=<string> path to sharable data + --stage1-path=<string> path to stage1 systems + --temp-path=<string> path to temporary data + --tftpboot-path=<string> path to root of tftp-server + --verbose-level=<int> level of logging verbosity (0-3) + +Please refer to the C<slxsettings>-manpage for a more detailed description +of these options. + =cut
\ No newline at end of file diff --git a/config-db/slxconfig-demuxer b/config-db/slxconfig-demuxer index 87ca1fc6..17c93407 100755 --- a/config-db/slxconfig-demuxer +++ b/config-db/slxconfig-demuxer @@ -464,191 +464,15 @@ slxconfig-demuxer [options] (ISC,...) --dry-run avoids writing anything, for testing -=head3 OpenSLX Options - - --base-path=<string> basic path to project files - --bin-path=<string> path to binaries and scripts - --config-path=<string> path to configuration files - --db-basepath=<string> basic path to openslx database - --db-datadir=<string> data folder created under db-basepath - --db-name=<string> name of database - --db-spec=<string> full DBI-specification of database - --db-type=<string> type of database to connect to - --export-path=<string> path to root of all exported filesystems - --locale=<string> locale to use for translations - --logfile=<string> file to write logging output to - --private-path=<string> path to private data - --public-path=<string> path to public (client-accesible) data - --share-path=<string> path to sharable data - --stage1-path=<string> path to stage1 systems - --temp-path=<string> path to temporary data - --tftpboot-path=<string> path to root of tftp-server - --verbose-level=<int> level of logging verbosity (0-3) - =head3 General Options --help brief help message --man full documentation --version show version -=head1 OPTIONS - -=head3 Script Options - -=over 8 - -=item B<< --dhcp-type >> - -Specifies the type of DHCP-export that shall be used. Currently, only 'ISC' is -supported. - -=item B<< --dry-run >> - -Runs the script but avoids writing anything. This is useful for testing, as -you can learn from the logging output what would have been done. - -=back - -=head3 OpenSLX Options - -=over 8 - -=item B<< --base-path=<string> >> - -Sets basic path to project files. - -Default is $SLX_BASE_PATH (usually F</opt/openslx>). - -=item B<< --bin-path=<string> >> - -Sets path to binaries and scripts. - -Default is $SLX_BASE_PATH/bin (usually F</opt/openslx/bin>). - -=item B<< --config-path=<string> >> - -Sets path to configuration files. - -Default is $SLX_CONFIG_PATH (usually F</etc/opt/openslx>). - -=item B<< --db-basepath=<string> >> - -Sets basic path to openslx database. - -Default is $SLX_DB_PATH (usually F</var/opt/openslx/db>). - -=item B<< --db-datadir=<string> >> - -Sets data folder created under db-basepath. - -Default is $SLX_DB_DATADIR (usually empty as it depends on db-type -whether or not such a directory is required at all). - -=item B<< --db-name=<string> >> - -Gives the name of the database to connect to. - -Default is $SLX_DB_NAME (usually C<openslx>). - -=item B<< --db-spec=<string> >> - -Gives the full DBI-specification of database to connect to. Content depends -on the db-type. - -Default is $SLX_DB_SPEC (usually empty as it will be built automatically). - -=item B<< --db-type=<string> >> - -Sets the type of database to connect to (CSV, SQLite, mysql, ...). - -Default $SLX_DB_TYPE (usually C<CSV>). - -=item B<< --export-path=<string> >> - -Sets path to root of all exported filesystems. For each type of export (NFS, -NBD, ...) a separate folder will be created in here. - -Default is $SLX_EXPORT_PATH (usually F</srv/openslx/export>. - -=item B<< --locale=<string> >> - -Sets the locale to use for translations. - -Defaults to the system's standard locale. - -=item B<< --logfile=<string> >> - -Specifies a file where logging output will be written to. - -Default is to log to STDERR. - -=item B<< --private-path=<string> >> - -Sets path to private data, where the config-db, vendor_oses and configurational -extensions will be stored. - -Default is $SLX_PRIVATE_PATH (usually F</var/opt/openslx>. - -=item B<< --public-path=<string> >> - -Sets path to public (client-accesible) data. - -Default is $SLX_PUBLIC_PATH (usually F</srv/openslx>. - -=item B<< --share-path=<string> >> - -Sets path to sharable data, where distro-specs and functionality templates -will be stored. - -Default is $SLX_SHARE_PATH (usually F</opt/openslx/share>. - -=item B<< --stage1-path=<string> >> - -Sets path to stage1 systems, where distributor-systems will be installed. - -Default is $SLX_STAGE1_PATH (usually F</var/opt/openslx/stage1>. - -=item B<< --temp-path=<string> >> - -Sets path to temporary data. - -Default is $SLX_TEMP_PATH (usually F</tmp>. - -=item B<< --tftpboot-path=<string> >> - -Sets path to root of tftp-server from which clients will access their files. - -Default is $SLX_TFTPBOOT_PATH (usually F</srv/openslx/tftpboot>. - -=item B<< --verbose-level=<int> >> - -Sets the level of logging verbosity (0-3). - -Default is $SLX_VERBOSE_LEVEL (usually 0, no logging). - -=back - -=head3 General Options - -=over 8 - -=item B<< --help >> - -Prints a brief help message and exits. - -=item B<< --man >> - -Prints the manual page and exits. - -=item B<< --version >> - -Prints the version and exits. - -=back - =head1 DESCRIPTION -B<slxconfig-demuxer.pl> will read information about all systems, clients and +B<slxconfig-demuxer> will read information about all systems, clients and groups from the OpenSLX configuration database, mix & match the individual configurational attributes and then demultiplex the resulting information to a set of configuration files. These files are used by any OpenSLX-client @@ -728,4 +552,71 @@ into a concrete set of configuration settings for specific clients and their offered systems, making sure that each client/system combination uses the appropriate settings. +=head1 OPTIONS + +=head3 Script Options + +=over 8 + +=item B<< --dhcp-type >> + +Specifies the type of DHCP-export that shall be used. Currently, only 'ISC' is +supported. + +=item B<< --dry-run >> + +Runs the script but avoids writing anything. This is useful for testing, as +you can learn from the logging output what would have been done. + +=back + +=head3 General Options + +=over 8 + +=item B<< --help >> + +Prints a brief help message and exits. + +=item B<< --man >> + +Prints the manual page and exits. + +=item B<< --version >> + +Prints the version and exits. + +=back + +=head1 SEE ALSO + +slxsettings, slxos-setup, slxos-export, slxconfig + +=head1 GENERAL OPENSLX OPTIONS + +Being a part of OpenSLX, this script supports several other options +which can be used to overrule the OpenSLX settings: + + --base-path=<string> basic path to project files + --bin-path=<string> path to binaries and scripts + --config-path=<string> path to configuration files + --db-basepath=<string> basic path to openslx database + --db-datadir=<string> data folder created under db-basepath + --db-name=<string> name of database + --db-spec=<string> full DBI-specification of database + --db-type=<string> type of database to connect to + --export-path=<string> path to root of all exported filesystems + --locale=<string> locale to use for translations + --logfile=<string> file to write logging output to + --private-path=<string> path to private data + --public-path=<string> path to public (client-accesible) data + --share-path=<string> path to sharable data + --stage1-path=<string> path to stage1 systems + --temp-path=<string> path to temporary data + --tftpboot-path=<string> path to root of tftp-server + --verbose-level=<int> level of logging verbosity (0-3) + +Please refer to the C<slxsettings>-manpage for a more detailed description +of these options. + =cut diff --git a/config-db/slxsettings b/config-db/slxsettings index 0189123e..4a57307c 100755 --- a/config-db/slxsettings +++ b/config-db/slxsettings @@ -157,13 +157,10 @@ slxsettings - OpenSLX-script to show & change local settings =head1 SYNOPSIS -slxsettings [options] +slxsettings [options] [action ...] - Script Options: - --quiet do not print anything - --remove=<string> remove given key from settings +=head3 OpenSLX Options - OpenSLX Options: --base-path=<string> basic path to project files --bin-path=<string> path to binaries and scripts --config-path=<string> path to configuration files @@ -182,137 +179,152 @@ slxsettings [options] --tftpboot-path=<string> path to root of tftp-server --verbose-level=<int> level of logging verbosity (0-3) - General Options: +=head3 General Options + --help brief help message --man full documentation + --quiet do not print anything --verbose show more information --version show version -=head1 OPTIONS - -=head3 Script Options +=head3 Actions =over 8 -=item B<--quiet> +=item B<< <openslx-option>=<value> >> -Runs the script without printing anything. +sets the specified openslx-option (without the leading '--') to the given value -=item B<--remove=<string>> +=item B<< remove=<openslx-option> >> -Removes given key from settings (apply more than once to remove several keys). +removes given openslx-option (sets it to an empty string) -=item B<--verbose> - -Prints the resulting settings after changes have been applied. =back +=head1 DESCRIPTION + +B<slxsettings> can be used to show or change the local settings for OpenSLX. + +Any cmdline-argument passed to this script will change the local OpenSLX +settings file (usually /etc/opt/openslx/settings.local). + +If you invoke the script without any arguments, it will print the current +settings and exit. + +=head1 OPTIONS + =head3 OpenSLX Options =over 8 -=item B<--base-path=<string>> +=item B<< --base-path=<string> >> Sets basic path to project files. Default is $SLX_BASE_PATH (usually F</opt/openslx>). -=item B<--bin-path=<string>> +=item B<< --bin-path=<string> >> Sets path to binaries and scripts. Default is $SLX_BASE_PATH/bin (usually F</opt/openslx/bin>). -=item B<--config-path=<string>> +=item B<< --config-path=<string> >> Sets path to configuration files. Default is $SLX_CONFIG_PATH (usually F</etc/opt/openslx>). -=item B<--db-basepath=<string>> +=item B<< --db-basepath=<string> >> Sets basic path to openslx database. Default is $SLX_DB_PATH (usually F</var/opt/openslx/db>). -=item B<--db-datadir=<string>> +=item B<< --db-datadir=<string> >> Sets data folder created under db-basepath. Default is $SLX_DB_DATADIR (usually empty as it depends on db-type whether or not such a directory is required at all). -=item B<--db-name=<string>> +=item B<< --db-name=<string> >> Gives the name of the database to connect to. Default is $SLX_DB_NAME (usually C<openslx>). -=item B<--db-spec=<string>> +=item B<< --db-spec=<string> >> Gives the full DBI-specification of database to connect to. Content depends on the db-type. Default is $SLX_DB_SPEC (usually empty as it will be built automatically). -=item B<--db-type=<string>> +=item B<< --db-type=<string> >> Sets the type of database to connect to (CSV, SQLite, mysql, ...). Default $SLX_DB_TYPE (usually C<CSV>). -=item B<--export-path=<string>> +=item B<< --export-path=<string> >> Sets path to root of all exported filesystems. For each type of export (NFS, NBD, ...) a separate folder will be created in here. Default is $SLX_EXPORT_PATH (usually F</srv/openslx/export>. -=item B<--locale=<string>> +=item B<< --locale=<string> >> Sets the locale to use for translations. Defaults to the system's standard locale. -=item B<--logfile=<string>> +=item B<< --logfile=<string> >> Specifies a file where logging output will be written to. Default is to log to STDERR. -=item B<--private-path=<string>> +=item B<< --private-path=<string> >> Sets path to private data, where the config-db, vendor_oses and configurational extensions will be stored. Default is $SLX_PRIVATE_PATH (usually F</var/opt/openslx>. -=item B<--public-path=<string>> +=item B<< --public-path=<string> >> Sets path to public (client-accesible) data. Default is $SLX_PUBLIC_PATH (usually F</srv/openslx>. -=item B<--share-path=<string>> +=item B<< --share-path=<string> >> Sets path to sharable data, where distro-specs and functionality templates will be stored. Default is $SLX_SHARE_PATH (usually F</opt/openslx/share>. -=item B<--temp-path=<string>> +=item B<< --stage1-path=<string> >> + +Sets path to stage1 systems, where distributor-systems will be installed. + +Default is $SLX_STAGE1_PATH (usually F</var/opt/openslx/stage1>. + +=item B<< --temp-path=<string> >> Sets path to temporary data. Default is $SLX_TEMP_PATH (usually F</tmp>. -=item B<--tftpboot-path=<string>> +=item B<< --tftpboot-path=<string> >> Sets path to root of tftp-server from which clients will access their files. Default is $SLX_TFTPBOOT_PATH (usually F</srv/openslx/tftpboot>. -=item B<--verbose-level=<int>> +=item B<< --verbose-level=<int> >> Sets the level of logging verbosity (0-3). @@ -324,26 +336,28 @@ Default is $SLX_VERBOSE_LEVEL (usually 0, no logging). =over 8 -=item B<--help> +=item B< --help> Prints a brief help message and exits. -=item B<--man> +=item B< --man> Prints the manual page and exits. -=item B<--version> +=item B< --quiet> -Prints the version and exits. +Runs the script without printing anything. -=back +=item B< --verbose> -=head1 DESCRIPTION +Prints the resulting settings after changes have been applied. -B<slxsetup.pl> can be used to show or change the local settings for OpenSLX. +=item B< --version> -Any cmdline-argument passed to this script will change the local OpenSLX -settings file (usually /etc/opt/openslx/settings.local). +Prints the version and exits. -If you invoke the script without any arguments, it will print the current -settings and exit. +=back + +=head1 SEE ALSO + +slxos-setup, slxos-export, slxconfig, slxconfig-demuxer
\ No newline at end of file diff --git a/installer/slxos-export b/installer/slxos-export index 3b3da55e..b3af06d4 100755 --- a/installer/slxos-export +++ b/installer/slxos-export @@ -14,9 +14,7 @@ use strict; my $abstract = q[ slxos-export - This script exports an OpenSLX-stage1-system (a.k.a. vendor-OS) into - an OpenSLX-stage2-system (a.k.a. export), which can be an NFS-export, - an NBD-image containing a squash-fs. + OpenSLX-script to generate an export from a vendor-OS. ]; use Getopt::Long qw(:config pass_through); @@ -138,10 +136,7 @@ __END__ =head1 NAME -slxos-export - OpenSLX-script to export a stage1-system (a.k.a. vendor-OS) into -a stage2-system (a.k.a. export). -The export itself can be done via several different types, e.g. via NFS or -via a squashfs inside of a network block device. +slxos-export - OpenSLX-script to generate an export from a vendor-OS. =head1 SYNOPSIS @@ -182,6 +177,37 @@ config-DB =back +=head1 DESCRIPTION + +B<slxos-export> converts an installed vendor-OS into a form that can be accessed +via network by booting clients. + +The resulting form of such a conversion is called an I<export> and those come +in different flavors: + +=over 8 + +=item B< Export Type 'NFS'> + +NFS (network file system) is a well established networking file system, which +is supported by LINUX since long. + +=item B< Export Type 'NBD-squash'> + +A rather modern concept is the network block device, which basically "transports" +a block device over the network (from server to client), making it possible to +use more or less any file system over the network. In this particular case, +a squash-FS is being used, which is a filesystem providing very good compression, +resulting in considerably reduced network traffic during boot (and execution). + +=back + +When invoking slxos-export, you have to pass it a vendor-OS name and the export +type you want to use and it will do the conversion (which can take a while, so +please be patient). + +The resulting export will be stored under C</srv/openslx/export>. + =head1 OPTIONS =over 4 @@ -240,4 +266,35 @@ removes that export from the config-DB, too. =back +=head1 SEE ALSO + +slxsettings, slxos-setup, slxconfig, slxconfig-demuxer + +=head1 GENERAL OPENSLX OPTIONS + +Being a part of OpenSLX, this script supports several other options +which can be used to overrule the OpenSLX settings: + + --base-path=<string> basic path to project files + --bin-path=<string> path to binaries and scripts + --config-path=<string> path to configuration files + --db-basepath=<string> basic path to openslx database + --db-datadir=<string> data folder created under db-basepath + --db-name=<string> name of database + --db-spec=<string> full DBI-specification of database + --db-type=<string> type of database to connect to + --export-path=<string> path to root of all exported filesystems + --locale=<string> locale to use for translations + --logfile=<string> file to write logging output to + --private-path=<string> path to private data + --public-path=<string> path to public (client-accesible) data + --share-path=<string> path to sharable data + --stage1-path=<string> path to stage1 systems + --temp-path=<string> path to temporary data + --tftpboot-path=<string> path to root of tftp-server + --verbose-level=<int> level of logging verbosity (0-3) + +Please refer to the C<slxsettings>-manpage for a more detailed description +of these options. + =cut
\ No newline at end of file diff --git a/installer/slxos-setup b/installer/slxos-setup index f158cf72..117cb980 100755 --- a/installer/slxos-setup +++ b/installer/slxos-setup @@ -166,8 +166,7 @@ __END__ =head1 NAME -slxos-setup - OpenSLX-script to install an operating system into a folder which -will be used as a OpenSLX-stage1-system (a.k.a. vendor-OS). +slxos-setup - OpenSLX-script to install a vendor-OS. =head1 SYNOPSIS @@ -214,6 +213,22 @@ updates an installed vendor-OS =back +=head1 DESCRIPTION + +B<slxos-setup> installs an operating system into a folder which +will be used as a OpenSLX-stage1-system (a.k.a. a I<vendor-OS>). + +You can either install a vendor-OS from scratch (causing the required +packages to be downloaded or copied from a local source). Installing +is supported for several different LINUX distributions, but not for all +of them. + +Alternatively, a locally installed operating system can be cloned +into a vendor-OS. + +When invoking slxos-setup, you have to pass it the name of the vendor-OS +you wish to create. + =head1 OPTIONS =over 8 @@ -328,4 +343,35 @@ from the config-DB, too. =back +=head1 SEE ALSO + +slxsettings, slxos-export, slxconfig, slxconfig-demuxer + +=head1 GENERAL OPENSLX OPTIONS + +Being a part of OpenSLX, this script supports several other options +which can be used to overrule the OpenSLX settings: + + --base-path=<string> basic path to project files + --bin-path=<string> path to binaries and scripts + --config-path=<string> path to configuration files + --db-basepath=<string> basic path to openslx database + --db-datadir=<string> data folder created under db-basepath + --db-name=<string> name of database + --db-spec=<string> full DBI-specification of database + --db-type=<string> type of database to connect to + --export-path=<string> path to root of all exported filesystems + --locale=<string> locale to use for translations + --logfile=<string> file to write logging output to + --private-path=<string> path to private data + --public-path=<string> path to public (client-accesible) data + --share-path=<string> path to sharable data + --stage1-path=<string> path to stage1 systems + --temp-path=<string> path to temporary data + --tftpboot-path=<string> path to root of tftp-server + --verbose-level=<int> level of logging verbosity (0-3) + +Please refer to the C<slxsettings>-manpage for a more detailed description +of these options. + =cut
\ No newline at end of file |