aboutsummaryrefslogtreecommitdiffstats
path: root/po/ca.po
Commit message (Expand)AuthorAgeFilesLines
* Update Catalan translation from TxYuri Chornoivan2018-10-221-7/+4
* Adding a stringPapoteur2018-10-191-78/+86
* Update po catalogsPapoteur2018-10-071-23/+23
* Update Catalan translation from TxYuri Chornoivan2018-08-231-6/+6
* Update Catalan translation from TxYuri Chornoivan2018-04-101-25/+27
* Update Catalan translation from TxYuri Chornoivan2018-04-051-87/+15
* Update pot and po filesPapoteur2018-03-181-49/+55
* Update translations catalog, po files and scriptPapoteur2018-03-161-139/+222
* Update Catalan translation from TxYuri Chornoivan2017-12-141-5/+5
* Update Catalan translation from TxYuri Chornoivan2017-11-251-18/+18
* Update Catalan translation from TxYuri Chornoivan2017-11-241-37/+91
* Update ast, ca, pl and uk languages. Add tg.Papoteur2017-02-091-90/+37
* Update Catalan translation from TxYuri Chornoivan2016-07-181-244/+75
* Correction of a word ProgressPapoteur2016-07-181-107/+107
* Update po files with the yui branchPapoteur2016-07-181-281/+410
* Update Catalan translation from TxYuri Chornoivan2016-03-181-37/+43
* Update po file without fuzzyingPapoteur2016-03-061-3/+3
* Update Catalan translation from TxYuri Chornoivan2015-12-081-2/+2
* Update Catalan translation from TxYuri Chornoivan2015-11-271-15/+15
* po formatting updates with sh po-update.sh scriptSARL ENR 682015-10-061-80/+49
* Update Catalan translation from TxYuri Chornoivan2015-06-291-29/+73
* Update Catalan translation from TxYuri Chornoivan2015-06-101-132/+86
* New release 0.410.41daviddavid2015-03-081-64/+63
* Updated po files with new catalogPapoteur2015-01-181-80/+92
* po formatting updates with sh po-update.sh scriptSARL ENR-682015-01-181-91/+182
* Formatting all .po files for future 0.32 releaseSARL ENR-682014-10-251-96/+100
* update for new release 0.32SARL ENR-682014-10-201-51/+51
* fix a typo on the word 'occurred' instead of 'occured'SARL ENR-682014-08-281-1/+1
* (0.30 release) Po formatting (ast,de,pt_BR,sl,sv,fr,uk,tr).po filesSARL ENR-682014-07-101-46/+46
* update for release 0.30SARL ENR-682014-07-071-42/+55
* update for release 0.30SARL ENR-682014-07-021-72/+84
* updated (all) po files for future 0.30 releaseSARL ENR-682014-06-151-48/+48
* updated (all) po files for future 0.30 releaseSARL ENR-682014-05-161-47/+47
* updated (all) po files for future 0.30 releaseSARL ENR-682014-05-091-47/+43
* updated (all) po files for future 0.30 releaseSARL ENR-682014-05-091-59/+130
* updated all po files for new "modifications"SARL ENR-682014-05-041-43/+43
* updated all po files for new "modifications"SARL ENR-682014-05-021-43/+43
* updated all po files for new "GtkAboutDialog"SARL ENR-682014-04-191-18/+22
* Fix an error space on a translation string (#: lib/isodumper.py:270)SARL ENR-682014-01-101-26/+27
* po formatting updates with sh po-update.sh scriptSARL ENR-682013-12-291-30/+34
* Update po files and po-update.sh to add isodumper.desktop title and commentpapoteur-mga2013-12-221-23/+28
* Update po files with new strings from polkit policypapoteur-mga2013-12-221-19/+27
* po formatting updates with sh po-update.sh scriptSARL ENR-682013-12-091-43/+43
* po formatting updates with sh po-update.sh scriptSARL ENR-682013-12-091-53/+68
* Updating po files with last modifications. Correction to update-po.sh.papoteur-mga2013-11-021-49/+69
* Update .po files from debian/ launchpadSARL ENR-682013-09-291-4/+5
* Added .po files from debian/ launchpadpapoteur-mga2013-09-251-0/+218
a> 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
/*
 * Guillaume Cottenceau (gc)
 *
 * Copyright 2000-2004 Mandriva
 *
 *
 * This software may be freely redistributed under the terms of the GNU
 * public license.
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

/*
 * Portions from Erik Troan (ewt@redhat.com)
 *
 * Copyright 1996 Red Hat Software 
 *
 */

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <stdarg.h>
#include <signal.h>
#include <linux/unistd.h>
#include <libldetect.h>

#include "stage1.h"

#include "log.h"
#include "probing.h"
#include "frontend.h"
#include "modules.h"
#include "tools.h"
#include "utils.h"
#include "automatic.h"
#include "mount.h"
#include "thirdparty.h"

#ifdef ENABLE_PCMCIA
#include "pcmcia/pcmcia.h"
#endif

#ifndef DISABLE_CDROM
#include "cdrom.h"
#endif

#ifndef DISABLE_NETWORK
#include "network.h"
#endif

#ifndef DISABLE_DISK
#include "disk.h"
#endif


/************************************************************
 * globals */



void fatal_error(char *msg)
{
	printf("FATAL ERROR IN STAGE1: %s\n\nI can't recover from this.\nYou may reboot your system.\n", msg);
	while (1);
}


/************************************************************
 * special frontend functs
 * (the principle is to not pollute frontend code with stage1-specific stuff) */

void stg1_error_message(char *msg, ...)
{
	va_list args;
	va_start(args, msg);
	unset_automatic();
	verror_message(msg, args);
	va_end(args);
}

void stg1_fatal_message(char *msg, ...)
{
	va_list args;
	va_start(args, msg);
	unset_automatic();
	verror_message(msg, args);
	va_end(args);
        exit(1);
}

void stg1_info_message(char *msg, ...)
{
	va_list args;
	va_start(args, msg);
	if (IS_AUTOMATIC) {
		vlog_message(msg, args);
		return;
	}
	vinfo_message(msg, args);
	va_end(args);
}


#ifdef SPAWN_SHELL
static pid_t shell_pid = 0;

/************************************************************
 * spawns a shell on console #2 */
static void spawn_shell(void)
{
	int fd;
	char * shell_name[] = { "/sbin/sh", NULL };

	log_message("spawning a shell");

	if (!IS_TESTING) {
		fd = open("/dev/tty2", O_RDWR);
		if (fd == -1) {
			log_message("cannot open /dev/tty2 -- no shell will be provided");
			return;
		}
		else if (access(shell_name[0], X_OK)) {
			log_message("cannot open shell - %s doesn't exist", shell_name[0]);
			return;
		}
		
		if (!(shell_pid = fork())) {
			dup2(fd, 0);
			dup2(fd, 1);
			dup2(fd, 2);
			
			close(fd);
			setsid();
			if (ioctl(0, TIOCSCTTY, NULL))
				log_perror("could not set new controlling tty");

			execv(shell_name[0], shell_name);
			log_message("execve of %s failed: %s", shell_name[0], strerror(errno));
			exit(-1);
		}
		
		close(fd);
	}
}
#endif

#ifdef SPAWN_INTERACTIVE
char * interactive_fifo = "/tmp/stage1-fifo";
static pid_t interactive_pid = 0;

/* spawns my small interactive on console #6 */
static void spawn_interactive(void)
{
	int fd;
	char * dev = "/dev/tty6";

	printf("spawning my interactive on %s\n", dev);

	if (!IS_TESTING) {
		fd = open(dev, O_RDWR);
		if (fd == -1) {
			printf("cannot open %s -- no interactive\n", dev);
			return;
		}

		if (mkfifo(interactive_fifo, O_RDWR)) {
			printf("cannot create fifo -- no interactive\n");
			return;
		}
		
		if (!(interactive_pid = fork())) {
			int fif_out;

			dup2(fd, 0);
			dup2(fd, 1);
			dup2(fd, 2);
			
			close(fd);
			setsid();
			if (ioctl(0, TIOCSCTTY, NULL))
				perror("could not set new controlling tty");

			fif_out = open(interactive_fifo, O_WRONLY);
			printf("Please enter your command (availables: [+,-] [rescue]).\n");
				
			while (1) {
				char s[50];
				int i = 0;
				printf("? ");
				fflush(stdout);
				read(0, &(s[i++]), 1);
				fcntl(0, F_SETFL, O_NONBLOCK);
				while (read(0, &(s[i++]), 1) > 0 && i < sizeof(s));
				fcntl(0, F_SETFL, 0);
				write(fif_out, s, i-2);
				printf("Ok.\n");
			}
		}
		
		close(fd);
	}
}
#endif


#ifdef ENABLE_PCMCIA
static void handle_pcmcia(void)
{
        char * pcmcia_adapter;

	pcmcia_adapter = pcmcia_probe();
	if (!pcmcia_adapter) {
		log_message("no pcmcia adapter found");
		return;
	}
	my_modprobe("pcmcia_core", ANY_DRIVER_TYPE, NULL);
	my_modprobe(pcmcia_adapter, ANY_DRIVER_TYPE, NULL);
	/* ds is an alias for pcmcia in recent 2.6 kernels
           but we don't have modules.alias in install, so try to load both */
	my_modprobe("ds", ANY_DRIVER_TYPE, NULL);
	my_modprobe("pcmcia", ANY_DRIVER_TYPE, NULL);
	
        /* setup a dynamic resource database for non statically mapped PCMCIA sockets */
	pcmcia_socket_startup(-1);

	add_to_env("PCMCIA", pcmcia_adapter);
}
#endif

#ifndef ENABLE_NETWORK_STANDALONE
static void handle_hid(void)
{
	struct hid_entries entry_list;
	unsigned int i;

	entry_list = hid_probe();
	for (i = 0; i < entry_list.nb; i++) {
		if (entry_list.entries[i].module != NULL)
			my_modprobe(entry_list.entries[i].module, ANY_DRIVER_TYPE, NULL);
	}
	my_modprobe("hid_generic", ANY_DRIVER_TYPE, NULL);
}


/************************************************************
 */

static void method_select_and_prepare(void)
{
	enum return_type results;
	char * choice;
	char * means[10], * means_auto[10];
	int i;

#ifndef DISABLE_DISK
	char * disk_install = "Hard disk"; char * disk_install_auto = "disk";
#endif
#ifndef DISABLE_CDROM
	char * cdrom_install = "CDROM drive"; char * cdrom_install_auto = "cdrom";
#endif
#ifndef DISABLE_NETWORK
	char * network_nfs_install = "NFS server"; char * network_nfs_install_auto = "nfs";
	char * network_ftp_install = "FTP server"; char * network_ftp_install_auto = "ftp";
	char * network_http_install = "HTTP server"; char * network_http_install_auto = "http";
#ifndef DISABLE_KA
	char * network_ka_install = "KA server"; char * network_ka_install_auto = "ka";
#endif
#endif
	char * thirdparty_install = "Load third party modules"; char * thirdparty_install_auto = "thirdparty";

	i = 0;
#ifndef DISABLE_NETWORK
	means[i] = network_nfs_install; means_auto[i++] = network_nfs_install_auto;
	means[i] = network_ftp_install; means_auto[i++] = network_ftp_install_auto;
	means[i] = network_http_install; means_auto[i++] = network_http_install_auto;
#ifndef DISABLE_KA
	means[i] = network_ka_install; means_auto[i++] = network_ka_install_auto;
#endif
#endif
#ifndef DISABLE_CDROM
	means[i] = cdrom_install; means_auto[i++] = cdrom_install_auto;
#endif
#ifndef DISABLE_DISK
	means[i] = disk_install; means_auto[i++] = disk_install_auto;
#endif
	means[i] = thirdparty_install; means_auto[i++] = thirdparty_install_auto;
	means[i] = NULL;

	unlink(IMAGE_LOCATION);

	results = ask_from_list_auto("Please choose the installation method.", means, &choice, "method", means_auto);

	if (results != RETURN_OK)
		return method_select_and_prepare();

#ifndef DISABLE_CDROM
	if (!strcmp(choice, cdrom_install))
		results = cdrom_prepare();
#endif
        
#ifndef DISABLE_DISK
	if (!strcmp(choice, disk_install))
		results = disk_prepare();
#endif
	
#ifndef DISABLE_NETWORK
	if (!strcmp(choice, network_nfs_install))
		results = nfs_prepare();

	if (!strcmp(choice, network_ftp_install))
		results = ftp_prepare();
	
	if (!strcmp(choice, network_http_install))
		results = http_prepare();

#ifndef DISABLE_KA
	if (!strcmp(choice, network_ka_install))
		results = ka_prepare();
#endif
#endif

	if (!strcmp(choice, thirdparty_install)) {
		thirdparty_load_modules();
		return method_select_and_prepare();
        }

	if (results != RETURN_OK)
		return method_select_and_prepare();

        /* try to find third party modules on the install media */
        thirdparty_load_media_modules();
}
#endif

static enum return_type create_initial_fs_symlinks(char* symlinks)
{
        FILE *f;
        char buf[5000];

        if (scall(!(f = fopen(symlinks, "rb")), "fopen"))
                return RETURN_ERROR;
        while (fgets(buf, sizeof(buf), f)) {
                char oldpath[500], newpath[500];
                buf[strlen(buf)-1] = '\0';  // trim \n
                if (sscanf(buf, "%s %s", oldpath, newpath) != 2) {
                        sprintf(oldpath, "%s%s", STAGE2_LOCATION, buf);
			sprintf(newpath, "%s", buf);
                }
		recursiveRemove_if_it_exists(newpath);
                log_message("creating symlink %s -> %s", oldpath, newpath);
                if (scall(symlink(oldpath, newpath), "symlink"))
                        return RETURN_ERROR;
        }
        fclose(f);
        return RETURN_OK;
}

void finish_preparing(void)
{
	recursiveRemove("/init");

	if (create_initial_fs_symlinks(STAGE2_LOCATION "/usr/share/symlinks") != RETURN_OK)
		stg1_fatal_message("Fatal error finishing initialization.");

	/* /tmp/syslog is used by the second init, so it must be copied now, not in stage2 */
	/* we remove it to ensure the old one is not copied over it in stage2 */

#ifdef SPAWN_SHELL
	if (shell_pid != 0) {
		int fd;
		const char *clear = "\033[H\033[J";
		kill(shell_pid, 9);
		log_message("killed shell");
		fd = open("/dev/tty2", O_RDWR);
		write(fd, clear, strlen(clear));
		close(fd);
        }
#endif
}

int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)), char **env)
{
#ifdef ENABLE_NETWORK_STANDALONE
	open_log();
	init_frontend("");

	unlink("/etc/resolv.conf"); /* otherwise it is read-only */
	set_param(MODE_AUTOMATIC);
	grab_automatic_params("network:dhcp");

	intf_select_and_up();
	finish_frontend();
	return 0;
#else
	if (getenv("DEBUGSTAGE1")) {
		set_param(MODE_DEBUGSTAGE1);
		set_param(MODE_TESTING);
        }

#ifdef SPAWN_INTERACTIVE
	spawn_interactive();
#endif

	open_log();
	log_message("welcome to the " DISTRIB_NAME " install (mdk-stage1, version " DISTRIB_VERSION " built " __DATE__ " " __TIME__")");
	process_cmdline();
#ifdef SPAWN_SHELL
	spawn_shell();
#endif
	init_modules_insmoding();
	init_frontend("Welcome to " DISTRIB_DESCR ", " __DATE__ " " __TIME__);

	probe_that_type(VIRTIO_DEVICES, BUS_ANY);

        /* load usb interface as soon as possible, helps usb mouse detection in stage2 */
	probe_that_type(USB_CONTROLLERS, BUS_USB);

	if (IS_THIRDPARTY)
		thirdparty_load_modules();

#ifdef ENABLE_PCMCIA
	if (!IS_NOAUTO)
		handle_pcmcia();
#endif
        
	handle_hid();

	if (IS_CHANGEDISK)
		stg1_info_message("You are starting the installation with an alternate booting method. "
				  "Please change your disk, and insert the Installation disk.");

	if (IS_RESCUE && total_memory() < MEM_LIMIT_RESCUE) {
		stg1_error_message("You are starting the rescue with a low memory configuration. "
				   "Our experience shows that your system may crash at any point "
				   "or lock up for no apparent reason. Continue at "
				   "your own risk. Alternatively, you may reboot your system now.");
	}

        method_select_and_prepare();

	thirdparty_destroy();

	if (access(STAGE2_LOCATION, R_OK) != 0)
		if (symlink(IMAGE_LOCATION_REL "/" LIVE_LOCATION_REL, STAGE2_LOCATION) != 0)
			log_perror("symlink from " IMAGE_LOCATION_REL "/" LIVE_LOCATION_REL " to " STAGE2_LOCATION " failed");

#ifdef SPAWN_INTERACTIVE
	if (interactive_pid != 0)
		kill(interactive_pid, 9);
#endif

	finish_preparing();

	finish_frontend();
	close_log();

	if (IS_RESCUE)
		return 66; /* ask init to exec new init */
	else
		return 0x35; /* ask init to run stage2 binary */
#endif
}