ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
From: "Денис Смирнов" <mithraen@freesource.info>
To: sisyphus@lists.altlinux.org
Subject: Re: [sisyphus] Текстовый инсталлер
Date: Sat, 4 Aug 2012 17:05:43 +0400
Message-ID: <20120804130543.GA9211@mw.mithraen.ru> (raw)
In-Reply-To: <CAC4WpAz7gm=afum=oOEATRPmp195=kxj+qTNdtPPpt6JHpLdWw@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 711 bytes --]

On Sat, Aug 04, 2012 at 03:03:15PM +0300, Dmitriy Kruglikov wrote:

DK> Давай делать эскалацию проблемы...
DK> Если нет возможности паковать/распаковывать хард-динки, значить их
DK> паковать и не нужно...
DK> Давай их _делать_ после распаковки.
DK> Или при первом старте ...

То есть, нужно два скрипта.

первый:
- выявит все хардлинки
- удалит их
- положит их список куда-нибудь

второй:
- пересоздаст после распаковки

Мне все-таки больше нравится вариант с патченым cpio.

В аттаче мой патч, который я писал в ноябре 2006. Это демо, но оно успешно
работало.

-- 
С уважением, Денис

http://mithraen.ru/
----------------------------------------------------------------------------

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: cpio-2.6-can-break-hardlinks.patch --]
[-- Type: text/x-patch; charset=utf-8, Size: 1900 bytes --]

ôÏÌØËÏ × cpio-2.6/rmt: rmt
ôÏÌØËÏ × cpio-2.6/rmt: rmt.o
ôÏÌØËÏ × cpio-2.6/src: copyin.o
ôÏÌØËÏ × cpio-2.6/src: copyout.o
diff -ur cpio-2.6.orig/src/copypass.c cpio-2.6/src/copypass.c
--- cpio-2.6.orig/src/copypass.c	2006-10-01 00:14:55 +0400
+++ cpio-2.6/src/copypass.c	2006-10-01 00:18:13 +0400
@@ -29,6 +29,46 @@
 #define lchown chown
 #endif
 
+/* Copy file */
+int copy_file(const char *infile, const char *outfile)
+{
+	int ifd, ofd, len;
+	struct stat in_stat;
+	mode_t oldmode;
+	char buf[4096];				/* XXX make it lerger. */
+	if ((ifd = open(infile, O_RDONLY)) < 0) {
+		return -1;
+	}
+	fstat(ifd, &in_stat);
+	oldmode = umask(0);
+	if ((ofd = open(outfile, O_WRONLY | O_TRUNC | O_CREAT, 07777 & in_stat.st_mode )) < 0) {
+		close(ifd);
+		umask(oldmode);
+		return -1;
+	}
+	fchown(ofd, in_stat.st_uid, in_stat.st_gid);
+	umask(oldmode);
+	while ((len = read(ifd, buf, sizeof(buf)))) {
+		int res;
+		if (len < 0) {
+			break;
+		}
+		/* XXX handle partial writes */
+		res = write(ofd, buf, len);
+		if (res != len) {
+			len = -1;			/* error marker */
+			break;
+		}
+	}
+	close(ifd);
+	close(ofd);
+	if (len < 0) {
+		unlink(outfile);
+	return -1;				/* error */
+	}
+	return 0;					/* success */
+}
+
 /* Copy files listed on the standard input into directory `directory_name'.
    If `link_flag', link instead of copying.  */
 
@@ -455,6 +495,8 @@
 link_to_name (char *link_name, char *link_target)
 {
   int res = link (link_target, link_name);
+  if (res < 0)
+	  copy_file(link_target, link_name);
   if (res < 0 && create_dir_flag)
     {
       create_all_directories (link_name);
@@ -470,6 +512,10 @@
     {
       error (0, errno, _("cannot link %s to %s"),
 	     link_target, link_name);
+	  res = copy_file(link_target, link_name);
+	  if (res)
+		  strerror("copy_file");
     }
   return res;
 }
+

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2012-08-04 13:05 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-30  6:51 Eugene Prokopiev
2012-07-30  6:55 ` Dmitriy Kruglikov
2012-07-30 11:18   ` Денис Смирнов
2012-07-30 14:32     ` Dmitriy Kruglikov
2012-07-30 14:46       ` Michael Shigorin
2012-07-30 18:41         ` Michael Shigorin
2012-07-30 22:19           ` Денис Смирнов
2012-07-31 16:05             ` Michael Shigorin
2012-08-01 10:12               ` Денис Смирнов
2012-08-01 11:11                 ` Michael Shigorin
2012-08-01 12:34                   ` Денис Смирнов
2012-08-01 20:01                     ` Michael Shigorin
2012-08-01 21:10                       ` Денис Смирнов
2012-07-31  0:41             ` Денис Смирнов
2012-07-31 15:44               ` [sisyphus] [JT] rpm2cpio.sh (was: Текстовый инсталлер) Michael Shigorin
2012-08-01 10:01                 ` Денис Смирнов
2012-08-01 10:20                     ` [sisyphus] [JT] rpm2cpio.sh Денис Смирнов
2012-07-31 18:31               ` [sisyphus] Текстовый инсталлер Michael A. Kangin
2012-08-01  9:59                 ` Денис Смирнов
2012-08-01 11:06                   ` Michael Shigorin
2012-08-01 11:44                     ` Michael A. Kangin
2012-08-01 19:54                       ` Michael Shigorin
2012-08-01 20:58                         ` Денис Смирнов
2012-08-01 12:08                     ` Денис Смирнов
2012-08-01 12:13                       ` Dmitriy Kruglikov
2012-08-01 12:28                         ` Денис Смирнов
2012-08-01 12:11                     ` Денис Смирнов
2012-08-01 15:03                   ` Anton V. Boyarshinov
2012-08-01 17:22                     ` Денис Смирнов
2012-08-01 17:27                       ` Денис Смирнов
2012-07-31  6:23             ` Dmitriy Kruglikov
2012-07-31  7:36               ` Michael Bochkaryov
2012-07-31 10:33                 ` Денис Смирнов
2012-07-31 10:38                   ` Michael Bochkaryov
2012-08-04  9:35                     ` Денис Смирнов
2012-08-04 12:03                       ` Dmitriy Kruglikov
2012-08-04 13:05                         ` Денис Смирнов [this message]
2012-07-31 10:38                   ` Dmitriy Kruglikov
2012-07-31 13:05                     ` Денис Смирнов
2012-07-31 10:34               ` Денис Смирнов
2012-07-30 22:15         ` Денис Смирнов
2012-07-31 15:20           ` Michael Shigorin
2012-08-01  9:57             ` Денис Смирнов
2012-08-01 11:21               ` Michael Shigorin
2012-08-01 12:39                 ` Денис Смирнов
2012-08-01 13:11                   ` Alexey Gladkov
2012-08-01 13:36                     ` Dmitriy Kruglikov
2012-08-01 20:28                       ` Alexey Gladkov
2012-08-01 21:13                         ` Денис Смирнов
2012-08-02 10:56                           ` Michael Shigorin
2012-08-02  6:36                         ` Michael A. Kangin
2012-08-04  9:38             ` Денис Смирнов
2012-07-30 22:21       ` Денис Смирнов
2012-07-31  4:09     ` Eugene Prokopiev
2012-07-31 10:13       ` Денис Смирнов
2012-07-31 10:33         ` Dmitriy Kruglikov
2012-07-31 10:44           ` Денис Смирнов
2012-07-31 10:52             ` Aleksey Novodvorsky
2012-07-31 11:02               ` Dmitriy Kruglikov
2012-07-31 13:03               ` Денис Смирнов
2012-07-31  4:03   ` Eugene Prokopiev
2012-07-31  8:51     ` Michael Bochkaryov
2012-07-31 13:07       ` Денис Смирнов
2012-07-31 15:15         ` Dmitriy Kruglikov
2012-08-01  9:52           ` Денис Смирнов
2012-07-31 16:09         ` Michael Shigorin
2012-08-01 10:26           ` Денис Смирнов
2012-08-01 11:13             ` Michael Shigorin
2012-08-01 10:25           ` Денис Смирнов
2012-07-31 10:10     ` Денис Смирнов

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120804130543.GA9211@mw.mithraen.ru \
    --to=mithraen@freesource.info \
    --cc=sisyphus@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git