tar -x -C /tmp -f /$(SNAME).tar
rm -f /$(SNAME).tar
@mkdir /tmp/sys
- cd /tmp && tar cf /install/cdrom/$(SNAME)-$(VERSION).tlz $(TAR_OPTIONS) * && rm -rf *
+ cd /tmp && tar cf /install/cdrom/distro.img $(TAR_OPTIONS) * && rm -rf *
# Other files
touch /install/cdrom/$(SNAME)-$(VERSION)-core$(CORE).media
$(TARGET) :
@$(PREBUILD)
- -mkdir -p /install/initrd/bin
- @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/install+setup/* $(DIR_APP)
- for i in $(DIR_SRC)/langs/*/install/lang_*.c ; do \
- cp $$i $(DIR_APP)/libsmooth; \
- done
- cd $(DIR_APP)/libsmooth && chmod 755 makelangs.pl
- cd $(DIR_APP)/libsmooth && make CFLAGS="-Os -fomit-frame-pointer -Wall \
- -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
- -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'"
- cd $(DIR_APP)/install && make CFLAGS="-Os -std=gnu99 -fomit-frame-pointer -Wall \
- -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
- -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DKERNEL_VERSION='\"$(KVER)\"'"
- cd $(DIR_APP)/install && install -v -m 0755 installer probenic.sh \
- downloadsource.sh mountdest.sh /usr/bin
- rm -rvf /usr/lib/dracut/modules.d/99installer
- cd $(DIR_APP)/install && cp -rvf dracut-module /usr/lib/dracut/modules.d/99installer
+ @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/installer/* $(DIR_APP)
+
+ cd $(DIR_APP) && ./autogen.sh
+ cd $(DIR_APP) && ./configure \
+ --prefix=/usr \
+ --with-distro-name="$(NAME)" \
+ --with-distro-sname="$(SNAME)" \
+ --with-distro-slogan="$(SLOGAN)" \
+ --with-config-root="$(CONFIG_ROOT)"
+ cd $(DIR_APP) && make $(MAKETUNING)
+ cd $(DIR_APP) && make install
#Patch ISO Name for download ...
- sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \
- /usr/bin/downloadsource.sh
- #Patch version for mediacheck ...
+ #sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \
+ # /usr/bin/downloadsource.sh
@rm -rf $(DIR_APP)
@$(POSTBUILD)
+++ /dev/null
-/* SmoothWall install program.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence. See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * Write the config and get password stuff.
- *
- */
-
-#include "install.h"
-
-extern FILE *flog;
-extern char *mylog;
-
-extern char **ctr;
-
-int write_lang_configs( char *lang)
-{
- struct keyvalue *kv = initkeyvalues();
-
- /* default stuff for main/settings. */
- replacekeyvalue(kv, "LANGUAGE", lang);
- replacekeyvalue(kv, "HOSTNAME", SNAME);
- replacekeyvalue(kv, "THEME", "ipfire");
- writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
- freekeyvalues(kv);
-
- return 1;
-}
-
-int write_ethernet_configs(struct keyvalue *ethernetkv)
-{
- /* Write out the network settings we got from a few mins ago. */
- writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings");
- return 1;
-}
-
-/* Taken from the cdrom one. */
-int getpassword(char *password, char *text)
-{
- char *values[] = { NULL, NULL, NULL }; /* pointers for the values. */
- struct newtWinEntry entries[] =
- {
- { ctr[TR_PASSWORD_PROMPT], &values[0], 2 },
- { ctr[TR_AGAIN_PROMPT], &values[1], 2 },
- { NULL, NULL, 0 }
- };
- char title[STRING_SIZE];
- int rc;
- int done;
-
- do
- {
- done = 1;
- sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
- rc = newtWinEntries(title, text,
- 50, 5, 5, 20, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
-
- if (rc != 2)
- {
- if (strlen(values[0]) == 0 || strlen(values[1]) == 0)
- {
- errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]);
- done = 0;
- strcpy(values[0], "");
- strcpy(values[1], "");
- }
- else if (strcmp(values[0], values[1]) != 0)
- {
- errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]);
- done = 0;
- strcpy(values[0], "");
- strcpy(values[1], "");
- }
- }
- }
- while (!done);
-
- strncpy(password, values[0], STRING_SIZE);
-
- if (values[0]) free(values[0]);
- if (values[1]) free(values[1]);
-
- return rc;
-}
-
+++ /dev/null
-#!/bin/sh
-###############################################################################
-# #
-# IPFire.org - A linux based firewall #
-# Copyright (C) 2011 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/>. #
-# #
-###############################################################################
-
-if [ -e /var/ipfire/ethernet/scanned_nics ]; then
- rm -f /var/ipfire/ethernet/scanned_nics
-fi
-touch /var/ipfire/ethernet/scanned_nics
-
-for card in `ls /sys/class/net`; do
-
- #Check if this is an Ethernet device (type=1)
- if [ `cat /sys/class/net/$card/type` == "1" ]; then
- hwaddr=`cat /sys/class/net/$card/address`
-
- #Check that is no VLAN if
- if [[ ! "$card" =~ "[.]" ]]; then
-
- #check if this not a bridge
- if [ ! -e /sys/class/net/$card/brforward ]; then
-
- #Check if mac is valid (not 00:00... or FF:FF...)
- if [ ! "$hwaddr" == "00:00:00:00:00:00" ];then
- if [ ! "$hwaddr" == "ff:ff:ff:ff:ff:ff" ];then
-
- driver=`grep DRIVER= /sys/class/net/$card/device/uevent | cut -d"=" -f2`
- type=`grep MODALIAS= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d":" -f1`
-
- #Default if not available in /sys/class/net
- if [ "a$type" == "a" ]; then
- type="???"
- fi
- if [ "a$driver" == "a" ]; then
- driver="Unknown Network Interface ($card)"
- fi
- description=`echo $type: $driver`
-
- #Get more details for pci and usb devices
- if [ "$type" == "pci" ]; then
- slotname=`grep PCI_SLOT_NAME= /sys/class/net/$card/device/uevent | cut -d"=" -f2`
- name=`lspci -s $slotname | cut -d':' -f3 | cut -c 2-`
- description=`echo $type: $name`
- fi
- if [ "$type" == "usb" ]; then
- bus=`grep DEVICE= /sys/class/net/$card/device/uevent | cut -d"/" -f5`
- dev=`grep DEVICE= /sys/class/net/$card/device/uevent | cut -d"/" -f6`
- #work around the base8 convert
- let bus=`echo 1$bus`-1000
- let dev=`echo 1$dev`-1000
- name=`lsusb -s $bus:$dev | cut -d':' -f3 | cut -c 6-`
- #kernel higher 3.2 changes
- if [ "$name" == "" ]; then
- vid=`grep PRODUCT= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d"/" -f1`
- pid=`grep PRODUCT= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d"/" -f2`
- name=`lsusb -d $vid:$pid | cut -d':' -f3 | cut -c 6-`
- fi
- description=`echo $type: $name`
- fi
-
- echo desc: \"$description\" >>/var/ipfire/ethernet/scanned_nics
- echo driver: $driver >>/var/ipfire/ethernet/scanned_nics
- echo network.hwaddr: $hwaddr >>/var/ipfire/ethernet/scanned_nics
- fi
- fi
- fi
- fi
- fi
-done
-
-# Revert Accesspoint marking at mac address
-sed -i 's|hwaddr: 06:|hwaddr: 00:|g' /var/ipfire/ethernet/scanned_nics
-
-exit 0
LD = gcc
LDFLAGS =
-LIBS = -lnewt -lslang -lpci -ludev -lblkid
+LIBS = -lnewt -lslang -lpci -ludev -lblkid -lsmooth
COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS)
######
-OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o hw.o
+OBJS=main.o unattended.o hw.o
installer: $(OBJS)
$(LINK) $(OBJS) -o $@ $(LIBS)
--- /dev/null
+# This file is part of the libsmooth library.
+#
+# libsmooth is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+AM_MAKEFLAGS = --no-print-directory
+AUTOMAKE_OPTIONS = color-tests parallel-tests
+
+SUBDIRS = .
+
+# remove targets if the command fails
+.DELETE_ON_ERROR:
+
+# keep intermediate files
+.SECONDARY:
+
+CLEANFILES =
+EXTRA_DIST =
+dracutmoduledir = $(prefix)/lib/dracut/modules.d/99installer
+
+AM_CPPFLAGS = \
+ -include $(top_builddir)/config.h \
+ -I $(top_srcdir)/include \
+ $(OUR_CPPFLAGS)
+
+AM_CFLAGS = $(OUR_CFLAGS)
+AM_LDFLAGS = $(OUR_LDFLAGS)
+
+bin_PROGRAMS = \
+ installer
+
+bin_SCRIPTS = \
+ downloadsource.sh
+
+#- installer -------------------------------------------------------------------
+
+installer_SOURCES = \
+ hw.c \
+ hw.h \
+ main.c \
+ unattended.c
+
+installer_CFLAGS = \
+ $(BLKID_CFLAGS) \
+ $(LIBSMOOTH_CFLAGS) \
+ $(PCI_CFLAGS) \
+ $(UDEV_CFLAGS)
+
+installer_LDADD = \
+ $(BLKID_LIBS) \
+ $(LIBSMOOTH_LIBS) \
+ $(NEWT_LIBS) \
+ $(PCI_LIBS) \
+ $(UDEV_LIBS)
+
+dracutmodule_DATA = \
+ dracut-module/70-dhcpcd.exe \
+ dracut-module/fake-root.sh \
+ dracut-module/module-setup.sh \
+ dracut-module/run-installer.sh
+
+#-------------------------------------------------------------------------------
+
+substitutions = \
+ '|PACKAGE_NAME=$(PACKAGE_NAME)|' \
+ '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \
+ '|prefix=$(prefix)|' \
+ '|exec_prefix=$(exec_prefix)|' \
+ '|libdir=$(libdir)|' \
+ '|includedir=$(includedir)|'
+
+SED_PROCESS = \
+ $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
+ $(SED) $(subst '|,-e 's|@,$(subst =,\@|,$(subst |',|g',$(substitutions)))) < $< > $@
+
+%.pc: %.pc.in Makefile
+ $(SED_PROCESS)
--- /dev/null
+#!/bin/sh
+
+autoreconf --force --install -I m4
--- /dev/null
+# This file is part of the installer.
+#
+# installer is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+AC_PREREQ([2.64])
+
+AC_INIT([installer],
+ [001],
+ [],
+ [installer],
+ [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([
+ foreign
+ 1.11
+ -Wall
+ -Wno-portability
+ silent-rules
+ tar-pax
+ no-dist-gzip
+ dist-xz
+ subdir-objects
+])
+AM_SILENT_RULES([yes])
+
+LT_PREREQ(2.2)
+LT_INIT([disable-static])
+
+AC_PROG_SED
+
+AC_PROG_CC
+AC_PROG_CC_C99
+AC_PROG_CC_C_O
+
+AC_PATH_PROG([M4], [m4])
+
+AC_CHECK_HEADERS([libintl.h])
+
+# This makes sure pkg.m4 is available.
+m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
+
+save_LIBS="$LIBS"
+
+# newt
+LIBS=
+AC_SEARCH_LIBS([newtWinMenu], [newt], [], [AC_MSG_ERROR([*** newt library not found])])
+NEWT_LIBS="$LIBS"
+AC_SUBST(NEWT_LIBS)
+
+LIBS="$save_LIBS"
+
+PKG_CHECK_MODULES(BLKID, [blkid])
+PKG_CHECK_MODULES(PCI, [libpci])
+PKG_CHECK_MODULES(LIBSMOOTH, [libsmooth])
+PKG_CHECK_MODULES(UDEV, [libudev])
+
+AC_ARG_WITH([distro-name],
+ AS_HELP_STRING([--with-distro-name] [The name of the distribution]),
+ AC_DEFINE_UNQUOTED([NAME], "$withval", [The name of the distribution]),
+ AC_MSG_ERROR([*** you need to set the name with --with-distro-name=]))
+
+AC_ARG_WITH([distro-sname],
+ AS_HELP_STRING([--with-distro-sname] [The short name of the distribution]),
+ AC_DEFINE_UNQUOTED([SNAME], "$withval", [The sname of the distribution]),
+ AC_MSG_ERROR([*** you need to set the sname with --with-distro-sname=]))
+
+AC_ARG_WITH([distro-slogan],
+ AS_HELP_STRING([--with-distro-slogan] [The slogan of the distribution]),
+ AC_DEFINE_UNQUOTED([SLOGAN], "$withval", [The slogan of the distribution]),
+ AC_MSG_ERROR([*** you need to set the slogan with --with-distro-slogan=]))
+
+AC_ARG_WITH([config-root],
+ AS_HELP_STRING([--with-distro-config-root] [The configuration directory]),
+ AC_DEFINE_UNQUOTED([CONFIG_ROOT], "$withval", [The config-root]),
+ AC_MSG_ERROR([*** you need to set CONFIG_ROOT with --with-config-root=]))
+
+AC_CONFIG_FILES([
+ Makefile
+])
+
+AC_OUTPUT
+AC_MSG_RESULT([
+ $PACKAGE_NAME $VERSION
+
+ CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
+ CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
+ LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
+])
# called by dracut
install() {
+ inst /etc/system-release
inst /usr/bin/installer
inst /usr/bin/downloadsource.sh
inst /usr/local/bin/iowrap
done
done
+ # Bash start files
+ inst_multiple /etc/profile /root/.bash_profile /etc/bashrc /root/.bashrc
+ inst_dir /etc/profile.d
+
inst_hook cmdline 99 "$moddir/fake-root.sh"
inst_hook pre-mount 99 "$moddir/run-installer.sh"
#include <linux/fs.h>
+#include <libsmooth.h>
+
#include "hw.h"
-#include "../libsmooth/libsmooth.h"
const char* other_filesystems[] = {
"/dev",
// If the source could not be mounted we
// cannot proceed.
- if (ret)
+ if (ret != 0)
return ret;
// Check if the test file exists.
- ret = access(SOURCE_TEST_FILE, F_OK);
+ ret = access(SOURCE_TEST_FILE, R_OK);
// Umount the test device.
hw_umount(SOURCE_MOUNT_PATH);
- return ret;
+ return (ret == 0);
}
char* hw_find_source_medium(struct hw* hw) {
strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/md"))
continue;
- if (hw_test_source_medium(dev_path)) {
+ if (hw_test_source_medium(dev_path) == 0) {
ret = strdup(dev_path);
}
// Determine the size of the target block device
if (dest->is_raid) {
dest->size = (dest->disk1->size >= dest->disk2->size) ?
- dest->disk1->size : dest->disk2->size;
+ dest->disk2->size : dest->disk1->size;
// The RAID will install some metadata at the end of the disk
// and we will save up some space for that.
*
*/
-#include "../libsmooth/libsmooth.h"
-
-#define IDE_EMPTY 0
-#define IDE_CDROM 1
-#define IDE_HD 2
-#define IDE_UNKNOWN 3
-
-/* config.c */
-int write_disk_configs(struct devparams *dp);
-int write_lang_configs( char *lang);
-int write_ethernet_configs(struct keyvalue *ethernetkv);
+#include <libsmooth.h>
/* unattended.c */
int unattended_setup(struct keyvalue *unattendedkv);
--- /dev/null
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2008 xine project
+dnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+dnl Check if FLAG in ENV-VAR is supported by compiler and append it
+dnl to WHERE-TO-APPEND variable
+dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
+
+AC_DEFUN([CC_CHECK_FLAG_APPEND], [
+ AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
+ AS_TR_SH([cc_cv_$2_$3]),
+ [eval "AS_TR_SH([cc_save_$2])='${$2}'"
+ eval "AS_TR_SH([$2])='-Werror $3'"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])],
+ [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
+ [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
+ eval "AS_TR_SH([$2])='$cc_save_$2'"])
+
+ AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
+ [eval "$1='${$1} $3'"])
+])
+
+dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2])
+AC_DEFUN([CC_CHECK_FLAGS_APPEND], [
+ for flag in $3; do
+ CC_CHECK_FLAG_APPEND($1, $2, $flag)
+ done
+])
+
+dnl Check if the flag is supported by linker (cacheable)
+dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+ AC_CACHE_CHECK([if $CC supports $1 flag],
+ AS_TR_SH([cc_cv_ldflags_$1]),
+ [ac_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $1"
+ AC_LINK_IFELSE([int main() { return 1; }],
+ [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
+ [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
+ LDFLAGS="$ac_save_LDFLAGS"
+ ])
+
+ AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+ [$2], [$3])
+])
+
+dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
+dnl the current linker to avoid undefined references in a shared object.
+AC_DEFUN([CC_NOUNDEFINED], [
+ dnl We check $host for which systems to enable this for.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ case $host in
+ dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
+ dnl are requested, as different implementations are present; to avoid problems
+ dnl use -Wl,-z,defs only for those platform not behaving this way.
+ *-freebsd* | *-openbsd*) ;;
+ *)
+ dnl First of all check for the --no-undefined variant of GNU ld. This allows
+ dnl for a much more readable commandline, so that people can understand what
+ dnl it does without going to look for what the heck -z defs does.
+ for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
+ CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
+ break
+ done
+ ;;
+ esac
+
+ AC_SUBST([LDFLAGS_NOUNDEFINED])
+])
+
+dnl Check for a -Werror flag or equivalent. -Werror is the GCC
+dnl and ICC flag that tells the compiler to treat all the warnings
+dnl as fatal. We usually need this option to make sure that some
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+ AC_CACHE_CHECK(
+ [for $CC way to treat warnings as errors],
+ [cc_cv_werror],
+ [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+ [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+ ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+ AS_TR_SH([cc_cv_attribute_$1]),
+ [ac_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
+ [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+ [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+ CFLAGS="$ac_save_CFLAGS"
+ ])
+
+ AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+ [AC_DEFINE(
+ AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+ [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+ )
+ $4],
+ [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+ CC_CHECK_ATTRIBUTE(
+ [constructor],,
+ [void __attribute__((constructor)) ctor() { int a; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+ CC_CHECK_ATTRIBUTE(
+ [format], [format(printf, n, n)],
+ [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+ CC_CHECK_ATTRIBUTE(
+ [format_arg], [format_arg(printf)],
+ [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+ CC_CHECK_ATTRIBUTE(
+ [visibility_$1], [visibility("$1")],
+ [void __attribute__((visibility("$1"))) $1_function() { }],
+ [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+ CC_CHECK_ATTRIBUTE(
+ [nonnull], [nonnull()],
+ [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+ CC_CHECK_ATTRIBUTE(
+ [unused], ,
+ [void some_function(void *foo, __attribute__((unused)) void *bar);],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+ CC_CHECK_ATTRIBUTE(
+ [sentinel], ,
+ [void some_function(void *foo, ...) __attribute__((sentinel));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+ CC_CHECK_ATTRIBUTE(
+ [deprecated], ,
+ [void some_function(void *foo, ...) __attribute__((deprecated));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+ CC_CHECK_ATTRIBUTE(
+ [alias], [weak, alias],
+ [void other_function(void *foo) { }
+ void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+ CC_CHECK_ATTRIBUTE(
+ [malloc], ,
+ [void * __attribute__((malloc)) my_alloc(int n);],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+ CC_CHECK_ATTRIBUTE(
+ [packed], ,
+ [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+ CC_CHECK_ATTRIBUTE(
+ [const], ,
+ [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+ [cc_cv_flag_visibility],
+ [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+ cc_cv_flag_visibility='yes',
+ cc_cv_flag_visibility='no')
+ CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+
+ AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+ [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+ [Define this if the compiler supports the -fvisibility flag])
+ $1],
+ [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([if compiler has __builtin_expect function],
+ [cc_cv_func_expect],
+ [ac_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [int some_function() {
+ int a = 3;
+ return (int)__builtin_expect(a, 3);
+ }])],
+ [cc_cv_func_expect=yes],
+ [cc_cv_func_expect=no])
+ CFLAGS="$ac_save_CFLAGS"
+ ])
+
+ AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+ [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+ [Define this if the compiler supports __builtin_expect() function])
+ $1],
+ [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+ [cc_cv_attribute_aligned],
+ [ac_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ for cc_attribute_align_try in 64 32 16 8 4 2; do
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+ int main() {
+ static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
+ return c;
+ }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
+ done
+ CFLAGS="$ac_save_CFLAGS"
+ ])
+
+ if test "x$cc_cv_attribute_aligned" != "x"; then
+ AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+ [Define the highest alignment supported])
+ fi
+])
-
/* SmoothWall install program.
*
* This program is distributed under the terms of the GNU General Public
*
*/
-#define _GNU_SOURCE
-
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include "hw.h"
#include "install.h"
-
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("installer", x)
+
#define INST_FILECOUNT 21000
#define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
#define LICENSE_FILE "/cdrom/COPYING"
extern char url[STRING_SIZE];
-struct nic nics[20] = { { "" , "" , "" } }; // only defined for compile
-struct knic knics[20] = { { "" , "" , "" , "" } }; // only defined for compile
-
-extern char *en_tr[];
-extern char *es_tr[];
-extern char *de_tr[];
-extern char *fr_tr[];
-extern char *nl_tr[];
-extern char *pl_tr[];
-extern char *ru_tr[];
-extern char *tr_tr[];
-
static int newtChecklist(const char* title, const char* message,
unsigned int width, unsigned int height, unsigned int num_entries,
const char** entries, int* states) {
newtFormAddComponents(form, textbox, subform, NULL);
- newtComponent btn_okay = newtButton((width - 18) / 3, height - 4, ctr[TR_OK]);
- newtComponent btn_cancel = newtButton((width - 18) / 3 * 2 + 9, height - 4, ctr[TR_CANCEL]);
+ newtComponent btn_okay = newtButton((width - 18) / 3, height - 4, _("OK"));
+ newtComponent btn_cancel = newtButton((width - 18) / 3 * 2 + 9, height - 4, _("Cancel"));
newtFormAddComponents(form, btn_okay, btn_cancel, NULL);
newtComponent answer = newtRunForm(form);
newtFormAddComponent(form, textbox);
char choice;
- newtComponent checkbox = newtCheckbox(3, height - 3, ctr[TR_LICENSE_ACCEPT],
+ newtComponent checkbox = newtCheckbox(3, height - 3, _("I accept this license"),
' ', " *", &choice);
- newtComponent btn = newtButton(width - 15, height - 4, ctr[TR_OK]);
+ newtComponent btn = newtButton(width - 15, height - 4, _("OK"));
newtFormAddComponents(form, checkbox, btn, NULL);
return ret;
}
+int write_lang_configs(const char *lang) {
+ struct keyvalue *kv = initkeyvalues();
+
+ /* default stuff for main/settings. */
+ replacekeyvalue(kv, "LANGUAGE", lang);
+ replacekeyvalue(kv, "HOSTNAME", SNAME);
+ replacekeyvalue(kv, "THEME", "ipfire");
+ writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
+ freekeyvalues(kv);
+
+ return 1;
+}
+
int main(int argc, char *argv[]) {
struct hw* hw = hw_init();
char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL };
char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL };
- char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL };
char* sourcedrive = NULL;
int rc = 0;
char commandstring[STRING_SIZE];
// check if we have to make an unattended install
if (strstr (line, "unattended") != NULL) {
unattended = 1;
- runcommandwithstatus("/bin/sleep 10", "WARNING: Unattended installation will start in 10 seconds...");
+ runcommandwithstatus("/bin/sleep 10", title, "WARNING: Unattended installation will start in 10 seconds...");
}
// check if we have to patch for serial console
if (strstr (line, "console=ttyS0") != NULL) {
langnames, &choice, "Ok", NULL);
}
- ctr = langtrs[choice];
- strcpy(shortlangname, shortlangnames[choice]);
+ setlocale(LC_ALL, shortlangnames[choice]);
- newtPushHelpLine(ctr[TR_HELPLINE]);
+ newtPushHelpLine(_("<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"));
if (!unattended) {
- sprintf(message, ctr[TR_WELCOME], NAME);
- newtWinMessage(title, ctr[TR_OK], message);
+ snprintf(message, sizeof(message),
+ _("Welcome to the %s installation program. "
+ "Selecting Cancel on any of the following screens will reboot the computer."), NAME);
+ newtWinMessage(title, _("Start installation"), message);
}
/* Search for a source drive that holds the right
fprintf(flog, "Source drive: %s\n", sourcedrive);
if (!sourcedrive) {
- newtWinMessage(title, ctr[TR_OK], ctr[TR_NO_LOCAL_SOURCE]);
- runcommandwithstatus("/bin/downloadsource.sh", ctr[TR_DOWNLOADING_ISO]);
+ newtWinMessage(title, _("OK"), _("No local source media found. Starting download."));
+ runcommandwithstatus("/bin/downloadsource.sh", title, _("Downloading installation image ..."));
if ((handle = fopen("/tmp/source_device", "r")) == NULL) {
- errorbox(ctr[TR_DOWNLOAD_ERROR]);
+ errorbox(_("Download error"));
goto EXIT;
}
fclose(copying);
if (newtLicenseBox(title, discl_msg, 75, 20)) {
- errorbox(ctr[TR_LICENSE_NOT_ACCEPTED]);
+ errorbox(_("License not accepted!"));
goto EXIT;
}
while (1) {
// no harddisks found
if (num_disks == 0) {
- errorbox(ctr[TR_NO_HARDDISK]);
+ errorbox(_("No hard disk found."));
goto EXIT;
// exactly one disk has been found
}
while (!selected_disks) {
- rc = newtChecklist(ctr[TR_DISK_SELECTION], ctr[TR_DISK_SELECTION_MSG],
+ rc = newtChecklist(_("Disk Selection"),
+ _("Select the disk(s) you want to install IPFire on. "
+ "First those will be partitioned, and then the partitions will have a filesystem put on them.\n\n"
+ "ALL DATA ON THE DISK WILL BE DESTROYED."),
50, 20, num_disks, disk_names, disk_selection);
// Error
// Nothing has been selected
} else if (rc == 0) {
- errorbox(ctr[TR_NO_DISK_SELECTED]);
+ errorbox(_("No disk has been selected.\n\n"
+ "Please select one or more disks you want to install IPFire on."));
} else {
selected_disks = hw_select_disks(disks, disk_selection);
num_selected_disks = hw_count_disks(selected_disks);
if (num_selected_disks == 1) {
- snprintf(message, sizeof(message), ctr[TR_DISK_SETUP_DESC], (*selected_disks)->description);
- rc = newtWinOkCancel(ctr[TR_DISK_SETUP], message, 50, 10,
- ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]);
+ snprintf(message, sizeof(message),
+ _("The installation program will now prepare the chosen harddisk:\n\n %s\n\n"
+ "Do you agree to continue?"), (*selected_disks)->description);
+ rc = newtWinOkCancel(_("Disk Setup"), message, 50, 10,
+ _("Delete all data"), _("Cancel"));
if (rc == 0)
break;
} else if (num_selected_disks == 2) {
- snprintf(message, sizeof(message), ctr[TR_RAID_SETUP_DESC],
- (*selected_disks)->description, (*selected_disks + 1)->description);
- rc = newtWinOkCancel(ctr[TR_RAID_SETUP], message, 50, 14,
- ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]);
+ snprintf(message, sizeof(message),
+ _("The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\n"
+ "Do you agree to continue?"), (*selected_disks)->description, (*selected_disks + 1)->description);
+ rc = newtWinOkCancel(_("RAID Setup"), message, 50, 14,
+ _("Delete all data"), _("Cancel"));
if (rc == 0) {
part_type = HW_PART_TYPE_RAID1;
// Currently not supported
} else {
- errorbox(ctr[TR_DISK_CONFIGURATION_NOT_SUPPORTED]);
+ errorbox(_("You disk configuration is currently not supported."));
}
if (selected_disks) {
struct hw_destination* destination = hw_make_destination(part_type, selected_disks);
if (!destination) {
- errorbox(ctr[TR_DISK_TOO_SMALL]);
+ errorbox(_("Your harddisk is too small."));
goto EXIT;
}
// Warn the user if there is not enough space to create a swap partition
if (!unattended && !*destination->part_swap) {
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]);
+ rc = newtWinChoice(title, _("OK"), _("Cancel"),
+ _("Your harddisk is very small, but you can continue with an very small swap. (Use with caution)."));
if (rc != 1)
goto EXIT;
int fstype;
const char* description;
} filesystems[] = {
- { HW_FS_EXT4, ctr[TR_EXT4FS] },
- { HW_FS_EXT4_WO_JOURNAL, ctr[TR_EXT4FS_WO_JOURNAL] },
- { HW_FS_XFS, ctr[TR_XFS] },
- { HW_FS_REISERFS, ctr[TR_REISERFS] },
+ { HW_FS_EXT4, _("ext4 Filesystem") },
+ { HW_FS_EXT4_WO_JOURNAL, _("ext4 Filesystem without journal") },
+ { HW_FS_XFS, _("XFS Filesystem") },
+ { HW_FS_REISERFS, _("ReiserFS Filesystem") },
{ 0, NULL },
};
unsigned int num_filesystems = sizeof(filesystems) / sizeof(*filesystems);
fs_names[i] = filesystems[i].description;
}
- rc = newtWinMenu(ctr[TR_CHOOSE_FILESYSTEM], ctr[TR_CHOOSE_FILESYSTEM],
- 50, 5, 5, 6, fs_names, &fs_choice, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+ rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"),
+ 50, 5, 5, 6, fs_names, &fs_choice, _("OK"), _("Cancel"), NULL);
if (rc == 0)
destination->filesystem = filesystems[fs_choice].fstype;
// Setting up RAID if needed.
if (destination->is_raid) {
- statuswindow(60, 4, title, ctr[TR_BUILDING_RAID]);
+ statuswindow(60, 4, title, _("Building RAID..."));
rc = hw_setup_raid(destination);
if (rc) {
- errorbox(ctr[TR_UNABLE_TO_BUILD_RAID]);
+ errorbox(_("Unable to build the RAID."));
goto EXIT;
}
}
// Execute the partitioning...
- statuswindow(60, 4, title, ctr[TR_PARTITIONING_DISK]);
+ statuswindow(60, 4, title, _("Partitioning disk..."));
rc = hw_create_partitions(destination);
if (rc) {
- errorbox(ctr[TR_UNABLE_TO_PARTITION]);
+ errorbox(_("Unable to partition the disk."));
goto EXIT;
}
newtPopWindow();
// Execute the formatting...
- statuswindow(60, 4, title, ctr[TR_CREATING_FILESYSTEMS]);
+ statuswindow(60, 4, title, _("Creating filesystems..."));
rc = hw_create_filesystems(destination);
if (rc) {
- errorbox(ctr[TR_UNABLE_TO_CREATE_FILESYSTEMS]);
+ errorbox(_("Unable to create filesystems."));
goto EXIT;
}
rc = hw_mount_filesystems(destination, DESTINATION_MOUNT_PATH);
if (rc) {
- errorbox(ctr[TR_UNABLE_TO_MOUNT_FILESYSTEMS]);
+ errorbox(_("Unable to mount filesystems."));
goto EXIT;
}
// Extract files...
snprintf(commandstring, STRING_SIZE,
- "/bin/tar -C /harddisk -xvf /cdrom/" SNAME "-" VERSION ".tlz --lzma 2>/dev/null");
-
+ "/bin/tar -C /harddisk -xvf /cdrom/distro.img --lzma 2>/dev/null");
+
if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT,
- ctr[TR_INSTALLING_FILES]))
- {
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);
+ _("Installing the system..."))) {
+ errorbox(_("Unable to install the system."));
goto EXIT;
}
/* Build cache lang file */
snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
- if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_LANG_CACHE]))
- {
- errorbox(ctr[TR_UNABLE_TO_INSTALL_LANG_CACHE]);
+ if (runcommandwithstatus(commandstring, title, _("Installing the language cache..."))) {
+ errorbox(_("Unable to install the language cache."));
goto EXIT;
}
// Installing bootloader...
- statuswindow(60, 4, title, ctr[TR_INSTALLING_GRUB]);
+ statuswindow(60, 4, title, _("Installing the bootloader..."));
rc = hw_install_bootloader(destination);
if (rc) {
- errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]);
+ errorbox(_("Unable to install the bootloader."));
goto EXIT;
}
mysystem(commandstring);
if (!unattended) {
- sprintf(message, ctr[TR_CONGRATULATIONS_LONG],
- NAME, SNAME, NAME);
- newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_PRESS_OK_TO_REBOOT], message);
+ snprintf(message, sizeof(message), _("%s was successfully installed. "
+ "Please remove any installation mediums from this system. "
+ "Setup will now run where you may configure networking and the system passwords. "
+ "After Setup has been completed, you should point your web browser at https://%s:444 "
+ "(or whatever you name your %s), and configure dialup networking (if required) and "
+ "remote access."), NAME, SNAME, NAME);
+ newtWinMessage(_("Congratulations!"), _("Reboot"), message);
}
allok = 1;
fprintf(flog, "Install program ended.\n");
if (!(allok))
- newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]);
+ newtWinMessage(title, _("OK"), _("Press Ok to reboot."));
if (allok) {
fflush(flog);
replacekeyvalue(ethernetkv, "GREEN_BROADCAST", green_broadcast);
replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0");
replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0");
- write_ethernet_configs(ethernetkv);
+ writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings");
freekeyvalues(ethernetkv);
/* timezone */