[Fai-commit] r6408 - in trunk: lib/setup-storage man
Michael Tautschnig
mt at alioth.debian.org
Fri Apr 15 13:13:25 UTC 2011
Author: mt
Date: 2011-04-15 13:13:22 +0000 (Fri, 15 Apr 2011)
New Revision: 6408
Modified:
trunk/lib/setup-storage/Commands.pm
trunk/lib/setup-storage/Parser.pm
trunk/lib/setup-storage/Sizes.pm
trunk/man/setup-storage.8
Log:
setup-storage: Added "all" as valid value for preserve*, resize, always_format
Thanks: Toomas Tamm for suggesting this.
* setup-storage/{Commands,Parser}.pm: Added "all" as valid value for
preserve_always, preserve_reinstall, resize, always_format with the same
semantics as specifying each device index separately; in addition,
preserve_always:all makes sure no parted operations on that disk happen at
all (suggested by Toomas Tamm).
* setup-storage.8: Document this extension.
* setup-storage/Sizes.pm: Ignore seemingly overflowing partitions if all
partitions are to be preserved; thereby we can properly deal with oddly
numbered partition tables.
Modified: trunk/lib/setup-storage/Commands.pm
===================================================================
--- trunk/lib/setup-storage/Commands.pm 2011-04-15 13:06:31 UTC (rev 6407)
+++ trunk/lib/setup-storage/Commands.pm 2011-04-15 13:13:22 UTC (rev 6408)
@@ -1185,6 +1185,16 @@
} elsif (defined($FAI::configs{$config}{partitions}{0})) {
# no partition table operations
$FAI::partition_table_deps{$disk} = "";
+ } elsif (defined($FAI::configs{$config}{opts_all}{preserve})) {
+ foreach my $part_id (&numsort(keys %{ $FAI::configs{$config}{partitions} })) {
+ # all partitions exist
+ &FAI::push_command( "true", "",
+ "exist_" . &FAI::make_device_name($disk, $part_id) );
+ # no partition table operations
+ $FAI::partition_table_deps{$disk} = "";
+ }
+ # no changes on this disk
+ $FAI::partition_table_deps{$disk} = "";
} else {
# create partitions on non-virtual configs
&FAI::setup_partitions($config);
Modified: trunk/lib/setup-storage/Parser.pm
===================================================================
--- trunk/lib/setup-storage/Parser.pm 2011-04-15 13:06:31 UTC (rev 6407)
+++ trunk/lib/setup-storage/Parser.pm 2011-04-15 13:13:22 UTC (rev 6408)
@@ -137,7 +137,8 @@
bootable => -1,
fstabkey => "device",
preserveparts => 0,
- partitions => {}
+ partitions => {},
+ opts_all => {}
};
# Init device tree object
@@ -176,6 +177,15 @@
# the index of the new partition
my $part_number = 0;
+ # defaults from options
+ my $preserve_default =
+ defined($FAI::configs{$FAI::device}{opts_all}{preserve}) ? 1 :
+ (defined($FAI::configs{$FAI::device}{opts_all}{preserve_lazy}) ? 2 : 0);
+ my $always_format_default =
+ defined($FAI::configs{$FAI::device}{opts_all}{always_format}) ? 1 : 0;
+ my $resize_default =
+ defined($FAI::configs{$FAI::device}{opts_all}{resize}) ? 1 : 0;
+
# create a primary partition
if ($type eq "primary") {
(defined($FAI::configs{$FAI::device}{partitions}{0})) and
@@ -283,8 +293,8 @@
defined ($part_size->{always_format})
or $part_size->{always_format} = 0;
- # add the resize = 0 flag, if it doesn't exist already
- defined ($part_size->{resize}) or $part_size->{resize} = 0;
+ # add the resize = default flag, if it doesn't exist already
+ defined ($part_size->{resize}) or $part_size->{resize} = $resize_default;
# add entry to device tree
push @{ $FAI::dev_children{$disk} }, &FAI::make_device_name($disk, $extended);
@@ -312,15 +322,15 @@
# add the preserve = 0 flag, if it doesn't exist already
defined ($FAI::partition_pointer->{size}->{preserve})
- or $FAI::partition_pointer->{size}->{preserve} = 0;
+ or $FAI::partition_pointer->{size}->{preserve} = $preserve_default;
# add the always_format = 0 flag, if it doesn't exist already
defined ($FAI::partition_pointer->{size}->{always_format})
- or $FAI::partition_pointer->{size}->{always_format} = 0;
+ or $FAI::partition_pointer->{size}->{always_format} = $always_format_default;
# add the resize = 0 flag, if it doesn't exist already
defined ($FAI::partition_pointer->{size}->{resize})
- or $FAI::partition_pointer->{size}->{resize} = 0;
+ or $FAI::partition_pointer->{size}->{resize} = $resize_default;
# add entry to device tree
push @{ $FAI::dev_children{$disk} }, $FAI::partition_pointer_dev_name;
@@ -401,6 +411,7 @@
&FAI::in_path("mdadm") or die "mdadm not found in PATH\n";
$FAI::device = "RAID";
$FAI::configs{$FAI::device}{fstabkey} = "device";
+ $FAI::configs{$FAI::device}{opts_all} = {};
}
raid_option(s?)
| 'cryptsetup'
@@ -421,6 +432,7 @@
# being configured
$FAI::device = "VG_";
$FAI::configs{"VG_--ANY--"}{fstabkey} = "device";
+ $FAI::configs{"VG_--ANY--"}{opts_all} = {};
}
lvm_option(s?)
| 'end'
@@ -452,30 +464,46 @@
option(s?)
| <error>
- raid_option: /^preserve_always:(\d+(,\d+)*)/
+ raid_option: /^preserve_always:((\d+(,\d+)*)|all)/
{
- # set the preserve flag for all ids in all cases
- $FAI::configs{RAID}{volumes}{$_}{preserve} = 1 foreach (split (",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{RAID}{opts_all}{preserve} = 1;
+ } else {
+ # set the preserve flag for all ids in all cases
+ $FAI::configs{RAID}{volumes}{$_}{preserve} = 1 foreach (split (",", $1));
+ }
}
- | /^preserve_reinstall:(\d+(,\d+)*)/
+ | /^preserve_reinstall:((\d+(,\d+)*)|all)/
{
# set the preserve flag for all ids if $FAI::reinstall is set
if ($FAI::reinstall) {
- $FAI::configs{RAID}{volumes}{$_}{preserve} = 1 foreach (split(",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{RAID}{opts_all}{preserve} = 1;
+ } else {
+ $FAI::configs{RAID}{volumes}{$_}{preserve} = 1 foreach (split(",", $1));
+ }
}
}
- | /^preserve_lazy:(\d+(,\d+)*)/
+ | /^preserve_lazy:((\d+(,\d+)*)|all)/
{
- $FAI::configs{RAID}{volumes}{$_}{preserve} = 2 foreach (split(",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{RAID}{opts_all}{preserve_lazy} = 1;
+ } else {
+ $FAI::configs{RAID}{volumes}{$_}{preserve} = 2 foreach (split(",", $1));
+ }
}
| /^fstabkey:(device|label|uuid)/
{
# the information preferred for fstab device identifieres
$FAI::configs{$FAI::device}{fstabkey} = $1;
}
- | /^always_format:(\d+(,\d+)*)/
+ | /^always_format:((\d+(,\d+)*)|all)/
{
- $FAI::configs{RAID}{volumes}{$_}{always_format} = 1 foreach (split (",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{RAID}{opts_all}{always_format} = 1;
+ } else {
+ $FAI::configs{RAID}{volumes}{$_}{always_format} = 1 foreach (split (",", $1));
+ }
}
cryptsetup_option: /^randinit/
@@ -483,41 +511,57 @@
$FAI::configs{$FAI::device}{randinit} = 1;
}
- lvm_option: m{^preserve_always:([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)}
+ lvm_option: m{^preserve_always:(([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)|all)}
{
- # set the preserve flag for all ids in all cases
- foreach (split (",", $1)) {
- (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
- die &FAI::internal_error("VG re-parse failed");
- $FAI::configs{"VG_$1"}{volumes}{$2}{size}{preserve} = 1;
+ if ($1 eq "all") {
+ $FAI::configs{"VG_--ANY--"}{opts_all}{preserve} = 1;
+ } else {
+ # set the preserve flag for all ids in all cases
+ foreach (split (",", $1)) {
+ (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
+ die &FAI::internal_error("VG re-parse failed");
+ $FAI::configs{"VG_$1"}{volumes}{$2}{size}{preserve} = 1;
+ }
}
}
- | m{^preserve_reinstall:([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)}
+ | m{^preserve_reinstall:(([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)|all)}
{
# set the preserve flag for all ids if $FAI::reinstall is set
if ($FAI::reinstall) {
- foreach (split (",", $1)) {
- (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
- die &FAI::internal_error("VG re-parse failed");
- $FAI::configs{"VG_$1"}{volumes}{$2}{size}{preserve} = 1;
+ if ($1 eq "all") {
+ $FAI::configs{"VG_--ANY--"}{opts_all}{preserve} = 1;
+ } else {
+ foreach (split (",", $1)) {
+ (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
+ die &FAI::internal_error("VG re-parse failed");
+ $FAI::configs{"VG_$1"}{volumes}{$2}{size}{preserve} = 1;
+ }
}
}
}
- | m{^preserve_lazy:([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)}
+ | m{^preserve_lazy:(([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)|all)}
{
- foreach (split (",", $1)) {
- (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
- die &FAI::internal_error("VG re-parse failed");
- $FAI::configs{"VG_$1"}{volumes}{$2}{size}{preserve} = 2;
+ if ($1 eq "all") {
+ $FAI::configs{"VG_--ANY--"}{opts_all}{preserve_lazy} = 1;
+ } else {
+ foreach (split (",", $1)) {
+ (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
+ die &FAI::internal_error("VG re-parse failed");
+ $FAI::configs{"VG_$1"}{volumes}{$2}{size}{preserve} = 2;
+ }
}
}
- | m{^resize:([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)}
+ | m{^resize:(([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)|all)}
{
- # set the resize flag for all ids
- foreach (split (",", $1)) {
- (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
- die &FAI::internal_error("VG re-parse failed");
- $FAI::configs{"VG_$1"}{volumes}{$2}{size}{resize} = 1;
+ if ($1 eq "all") {
+ $FAI::configs{"VG_--ANY--"}{opts_all}{resize} = 1;
+ } else {
+ # set the resize flag for all ids
+ foreach (split (",", $1)) {
+ (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
+ die &FAI::internal_error("VG re-parse failed");
+ $FAI::configs{"VG_$1"}{volumes}{$2}{size}{resize} = 1;
+ }
}
}
| /^fstabkey:(device|label|uuid)/
@@ -525,39 +569,59 @@
# the information preferred for fstab device identifieres
$FAI::configs{"VG_--ANY--"}{fstabkey} = $1;
}
- | m{^always_format:([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)}
+ | m{^always_format:(([^/,\s\-]+-[^/,\s\-]+(,[^/,\s\-]+-[^/,\s\-]+)*)|all)}
{
- foreach (split (",", $1)) {
- (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
- die &FAI::internal_error("VG re-parse failed");
- $FAI::configs{"VG_$1"}{volumes}{$2}{size}{always_format} = 1;
+ if ($1 eq "all") {
+ $FAI::configs{"VG_--ANY--"}{opts_all}{always_format} = 1;
+ } else {
+ foreach (split (",", $1)) {
+ (m{^([^/,\s\-]+)-([^/,\s\-]+)}) or
+ die &FAI::internal_error("VG re-parse failed");
+ $FAI::configs{"VG_$1"}{volumes}{$2}{size}{always_format} = 1;
+ }
}
}
- option: /^preserve_always:(\d+(,\d+)*)/
+ option: /^preserve_always:((\d+(,\d+)*)|all)/
{
- # set the preserve flag for all ids in all cases
- $FAI::configs{$FAI::device}{partitions}{$_}{size}{preserve} = 1 foreach (split (",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{$FAI::device}{opts_all}{preserve} = 1;
+ } else {
+ # set the preserve flag for all ids in all cases
+ $FAI::configs{$FAI::device}{partitions}{$_}{size}{preserve} = 1 foreach (split (",", $1));
+ }
$FAI::configs{$FAI::device}{preserveparts} = 1;
}
- | /^preserve_reinstall:(\d+(,\d+)*)/
+ | /^preserve_reinstall:((\d+(,\d+)*)|all)/
{
# set the preserve flag for all ids if $FAI::reinstall is set
if ($FAI::reinstall) {
- $FAI::configs{$FAI::device}{partitions}{$_}{size}{preserve} = 1 foreach (split(",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{$FAI::device}{opts_all}{preserve} = 1;
+ } else {
+ $FAI::configs{$FAI::device}{partitions}{$_}{size}{preserve} = 1 foreach (split(",", $1));
+ }
$FAI::configs{$FAI::device}{preserveparts} = 1;
}
}
- | /^preserve_lazy:(\d+(,\d+)*)/
+ | /^preserve_lazy:((\d+(,\d+)*)|all)/
{
- $FAI::configs{$FAI::device}{partitions}{$_}{size}{preserve} = 2 foreach (split(",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{$FAI::device}{opts_all}{preserve_lazy} = 1;
+ } else {
+ $FAI::configs{$FAI::device}{partitions}{$_}{size}{preserve} = 2 foreach (split(",", $1));
+ }
$FAI::configs{$FAI::device}{preserveparts} = 2;
}
- | /^resize:(\d+(,\d+)*)/
+ | /^resize:((\d+(,\d+)*)|all)/
{
- # set the resize flag for all ids
- $FAI::configs{$FAI::device}{partitions}{$_}{size}{resize} = 1 foreach (split(",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{$FAI::device}{opts_all}{resize} = 1;
+ } else {
+ # set the resize flag for all ids
+ $FAI::configs{$FAI::device}{partitions}{$_}{size}{resize} = 1 foreach (split(",", $1));
+ }
$FAI::configs{$FAI::device}{preserveparts} = 1;
}
| /^disklabel:(msdos|gpt-bios|gpt)/
@@ -626,9 +690,13 @@
push @{ $FAI::dev_children{$disk} }, &FAI::make_device_name($disk, $pd);
}
}
- | /^always_format:(\d+(,\d+)*)/
+ | /^always_format:((\d+(,\d+)*)|all)/
{
- $FAI::configs{$FAI::device}{partitions}{$_}{size}{always_format} = 1 foreach (split(",", $1));
+ if ($1 eq "all") {
+ $FAI::configs{$FAI::device}{opts_all}{always_format} = 1;
+ } else {
+ $FAI::configs{$FAI::device}{partitions}{$_}{size}{always_format} = 1 foreach (split(",", $1));
+ }
}
volume: /^vg\s+/ name devices vgcreateopt(s?)
@@ -649,12 +717,14 @@
$FAI::configs{RAID}{volumes}{$vol_id}{mode} = $1;
# initialise the hash of devices
$FAI::configs{RAID}{volumes}{$vol_id}{devices} = {};
- # initialise the preserve flag
+ # initialise the flags
defined($FAI::configs{RAID}{volumes}{$vol_id}{preserve}) or
- $FAI::configs{RAID}{volumes}{$vol_id}{preserve} = 0;
- # initialise the always_format flag
+ $FAI::configs{RAID}{volumes}{$vol_id}{preserve} =
+ defined($FAI::configs{RAID}{opts_all}{preserve}) ? 1 :
+ (defined($FAI::configs{RAID}{opts_all}{preserve_lazy}) ? 2 : 0);
defined($FAI::configs{RAID}{volumes}{$vol_id}{always_format}) or
- $FAI::configs{RAID}{volumes}{$vol_id}{always_format} = 0;
+ $FAI::configs{RAID}{volumes}{$vol_id}{always_format} =
+ defined($FAI::configs{RAID}{opts_all}{always_format}) ? 1 : 0;
# set the reference to the current volume
# the reference is used by all further processing of this config line
$FAI::partition_pointer = (\%FAI::configs)->{RAID}->{volumes}->{$vol_id};
@@ -737,13 +807,17 @@
# initialise the new hash
defined($FAI::configs{$FAI::device}{volumes}{$2}) or
$FAI::configs{$FAI::device}{volumes}{$2} = {};
- # initialise the preserve and resize flags
+ # initialise the flags
defined($FAI::configs{$FAI::device}{volumes}{$2}{size}{preserve}) or
- $FAI::configs{$FAI::device}{volumes}{$2}{size}{preserve} = 0;
+ $FAI::configs{$FAI::device}{volumes}{$2}{size}{preserve} =
+ defined($FAI::configs{"VG_--ANY--"}{opts_all}{preserve}) ? 1 :
+ (defined($FAI::configs{"VG_--ANY--"}{opts_all}{preserve_lazy}) ? 2 : 0);
defined($FAI::configs{$FAI::device}{volumes}{$2}{size}{always_format}) or
- $FAI::configs{$FAI::device}{volumes}{$2}{size}{always_format} = 0;
+ $FAI::configs{$FAI::device}{volumes}{$2}{size}{always_format} =
+ defined($FAI::configs{"VG_--ANY--"}{opts_all}{always_format}) ? 1 : 0;
defined($FAI::configs{$FAI::device}{volumes}{$2}{size}{resize}) or
- $FAI::configs{$FAI::device}{volumes}{$2}{size}{resize} = 0;
+ $FAI::configs{$FAI::device}{volumes}{$2}{size}{resize} =
+ defined($FAI::configs{"VG_--ANY--"}{opts_all}{resize}) ? 1 : 0;
# set the reference to the current volume
# the reference is used by all further processing of this config line
$FAI::partition_pointer = (\%FAI::configs)->{$FAI::device}->{volumes}->{$2};
Modified: trunk/lib/setup-storage/Sizes.pm
===================================================================
--- trunk/lib/setup-storage/Sizes.pm 2011-04-15 13:06:31 UTC (rev 6407)
+++ trunk/lib/setup-storage/Sizes.pm 2011-04-15 13:13:22 UTC (rev 6408)
@@ -319,7 +319,8 @@
my $curr_part = $current_disk->{partitions}->{$part_id};
($next_start > $curr_part->{begin_byte})
- and die "Previous partitions overflow begin of preserved partition $part_dev_name\n";
+ and die "Previous partitions overflow begin of preserved partition $part_dev_name\n"
+ unless (defined($FAI::configs{$config}{opts_all}{preserve}));
# get what the user desired
my ($start, $end) = &FAI::make_range($part->{size}->{range}, $max_avail);
Modified: trunk/man/setup-storage.8
===================================================================
--- trunk/man/setup-storage.8 2011-04-15 13:06:31 UTC (rev 6407)
+++ trunk/man/setup-storage.8 2011-04-15 13:13:22 UTC (rev 6408)
@@ -162,25 +162,25 @@
lvmoption ::= /* empty */
.br
- | preserve_always:[^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*
+ | preserve_always:([^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*|all)
.br
/* preserve volumes -- always */
.br
- | preserve_reinstall:[^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*
+ | preserve_reinstall:([^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*|all)
.br
/* preserve volumes -- unless the system is installed for the
.br
first time */
.br
- | preserve_lazy:[^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*
+ | preserve_lazy:([^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*|all)
.br
/* preserve volumes -- unless these don't exist yet */
.br
- | always_format:[^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*
+ | always_format:([^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*|all)
.br
/* run mkfs on the volumes, even if marked as preserve */
.br
- | resize:[^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*
+ | resize:([^/,\\s\\-]+-[^/,\\s\\-]+(,[^/,\\s\\-]+-[^/,\\s\\-]+)*|all)
.br
/* attempt to resize partitions */
.br
@@ -196,21 +196,21 @@
raidoption ::= /* empty */
.br
- | preserve_always:[[:digit:]]+(,[[:digit:]]+)*
+ | preserve_always:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* preserve volumes -- always */
.br
- | preserve_reinstall:[[:digit:]]+(,[[:digit:]]+)*
+ | preserve_reinstall:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* preserve volumes -- unless the system is installed for the
.br
first time */
.br
- | preserve_lazy:[[:digit:]]+(,[[:digit:]]+)*
+ | preserve_lazy:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* preserve volumes -- unless these don't exist yet */
.br
- | always_format:[[:digit:]]+(,[[:digit:]]+)*
+ | always_format:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* run mkfs on the volumes, even if marked as preserve */
.br
@@ -234,25 +234,25 @@
option ::= /* empty */
.br
- | preserve_always:[[:digit:]]+(,[[:digit:]]+)*
+ | preserve_always:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* preserve partitions -- always */
.br
- | preserve_reinstall:[[:digit:]]+(,[[:digit:]]+)*
+ | preserve_reinstall:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* preserve partitions -- unless the system is installed for the
.br
first time */
.br
- | preserve_lazy:[[:digit:]]+(,[[:digit:]]+)*
+ | preserve_lazy:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* preserve partitions -- unless these don't exist yet */
.br
- | always_format:[[:digit:]]+(,[[:digit:]]+)*
+ | always_format:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* run mkfs on the partitions, even if marked as preserve */
.br
- | resize:[[:digit:]]+(,[[:digit:]]+)*
+ | resize:([[:digit:]]+(,[[:digit:]]+)*|all)
.br
/* attempt to resize partitions */
.br
More information about the Fai-commit
mailing list