This reverts commit 9d1708e081d7e7ba490db3620509dcce29cb0ae8.
Signed-off-by: Stefan Schantl stefan.schantl@ipfire.org --- config/rootfiles/common/GeoIP | 12 +++++ lfs/GeoIP | 84 +++++++++++++++++++++++++++++++++++ make.sh | 1 + 3 files changed, 97 insertions(+) create mode 100644 config/rootfiles/common/GeoIP create mode 100644 lfs/GeoIP
diff --git a/config/rootfiles/common/GeoIP b/config/rootfiles/common/GeoIP new file mode 100644 index 000000000..d76ba645e --- /dev/null +++ b/config/rootfiles/common/GeoIP @@ -0,0 +1,12 @@ +#usr/bin/geoip-lookup +#usr/lib/perl5/site_perl/5.12.3/Geo +#usr/lib/perl5/site_perl/5.12.3/Geo/IP +usr/lib/perl5/site_perl/5.12.3/Geo/IP/PurePerl.pm +#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Geo +#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Geo/IP +#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Geo/IP/PurePerl +#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Geo/IP/PurePerl/.packlist +#usr/share/GeoIP +usr/share/GeoIP/GeoIP.dat +#usr/share/man/man1/geoip-lookup.1 +#usr/share/man/man3/Geo::IP::PurePerl.3 diff --git a/lfs/GeoIP b/lfs/GeoIP new file mode 100644 index 000000000..ce758d8a5 --- /dev/null +++ b/lfs/GeoIP @@ -0,0 +1,84 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007-2018 IPFire Team info@ipfire.org # +# # +# 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 3 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, see http://www.gnu.org/licenses/. # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 1.25 +DATVER = 30062018 + +THISAPP = Geo-IP-PurePerl-$(VER) +DL_FILE = $(THISAPP).tar.gz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) GeoIP.dat-$(DATVER).gz + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) +GeoIP.dat-$(DATVER).gz = $(DL_FROM)/GeoIP.dat-$(DATVER).gz + +$(DL_FILE)_MD5 = a47a1b71f7cd7c46cca9efcc448e0726 +GeoIP.dat-$(DATVER).gz_MD5 = d538e57ad9268fdc7955c6cf9a37c4a9 + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/geoip_1_25_change_database_path.patch + cd $(DIR_APP) && perl Makefile.PL + cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE) + cd $(DIR_APP) && make install + cd $(DIR_APP) && mkdir -p /usr/share/GeoIP && \ + zcat $(DIR_DL)/GeoIP.dat-$(DATVER).gz > /usr/share/GeoIP/GeoIP.dat + cd $(DIR_APP) && chmod 777 /srv/web/ipfire/html/images/flags + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index 1d9163dce..601f1675b 100755 --- a/make.sh +++ b/make.sh @@ -1305,6 +1305,7 @@ buildipfire() { lfsmake2 python-daemon lfsmake2 python-ipaddress lfsmake2 glib + lfsmake2 GeoIP lfsmake2 ntp lfsmake2 openssh lfsmake2 fontconfig
Enhanching the code to fix the lookup will rapidely slow down the lookup speed. Because using the GeoIP2 module is no option ( the reasons have been described in the commit message which will now reverted), we have decided to temporary switch back to the old module until a nice solution has been found.
This reverts commit ff21ff90d24de0f648d24bb906c45738b81ce67a.
Signed-off-by: Stefan Schantl stefan.schantl@ipfire.org --- config/cfgroot/geoip-functions.pl | 75 +++---------------------------- 1 file changed, 7 insertions(+), 68 deletions(-)
diff --git a/config/cfgroot/geoip-functions.pl b/config/cfgroot/geoip-functions.pl index 9f86a09ba..c8ff47d2e 100644 --- a/config/cfgroot/geoip-functions.pl +++ b/config/cfgroot/geoip-functions.pl @@ -23,82 +23,21 @@
package GeoIP;
-require '/var/ipfire/network-functions.pl'; - +use Geo::IP::PurePerl; use Locale::Codes::Country;
-# Path where all the GeoIP related databases are stored. -my $geoip_database_dir = "/var/lib/GeoIP"; - -# Database which contains all IPv4 networks. -my $address_ipv4_database = "GeoLite2-Country-Blocks-IPv4.csv"; - -# Database wich contains the locations data. -my $location_database = "GeoLite2-Country-Locations-en.csv"; +my $database;
sub lookup($) { my $address = shift; - my $location_id; - my $country_code; - - # Check if the given address is valid. - unless(&Network::check_ip_address($address)) { - return; - } - - # Open the address database. - open(ADDRESS, "$geoip_database_dir/$address_ipv4_database") or die "Could not open $geoip_database_dir/$address_ipv4_database. $!\n"; - - # Loop through the file. - while(my $line = <ADDRESS>) { - # Remove newlines. - chomp($line); - - # Split the line content. - my ($network, $geoname_id, $registered_country_geoname_id, $represented_country_geoname_id, $is_anonymous_proxy, $is_satellite_provider) = split(/,/, $line);
- # Check if the given address is part of the current processed network. - if (&Network::ip_address_in_network($address, $network)) { - # Store the geoname_id for this address. - $location_id = $geoname_id; - - # Break loop. - last; - } + # Load the database into memory if not already done + if (!$database) { + $database = Geo::IP::PurePerl->new(GEOIP_MEMORY_CACHE); }
- # Return nothing if no location_id could be found. - return unless($location_id); - - # Close filehandle. - close(ADDRESS); - - # Open the location database. - open(LOCATION, "$geoip_database_dir/$location_database") or die "Could not open $geoip_database_dir/$location_database. $!\n"; - - # Loop through the file. - while(my $line = <LOCATION>) { - # Remove newlines. - chomp($line); - - # Split the line content. - my ($geoname_id, $locale_code, $continent_code, $continent_name, $country_iso_code, $country_name, $is_in_european_union) = split(/,/, $line); - - # Check if the correct location_id has been found. - if ($geoname_id eq $location_id) { - # Store the county code. - $country_code = $country_iso_code; - - # Break loop. - last; - } - } - - # Close filehandle. - close(LOCATION); - - # Return the obtained country code. - return $country_code; + # Return the name of the country + return $database->country_code_by_name($address); }
# Function to get the flag icon for a specified country code.