Удалил базу данных pacman

При установке арча, сделал var как отдельный раздел. При выключении системы ошибка была, типа невозможно отмонтировать /var, т.к. логи пишутся.
Решил перенести данные в /, но неудачно. Сейчас у меня /var/lib/pacman пустая.
Можно как-то возобновить базу из установленых пакетов?
Интересуют названия пакетов, ибо сейчас даже обновиться не могу.
/var/log/pacman.log остался?
если нет, то писать скрипт, который проверит все файлы на принадлежность к пакетам, потом дело техники...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
/var/log/pacman.log не остался. как получить список файлов не локального пакета?
например pkgfile /путь/к/файлу
если не устанавливал pkgfile раньше, то можно распаковать пакет pkgfile-а просто в систему. и выполнить инструкции по установке (они в самом пакете) если нужно.
а скрипт должен перебрать все файлы в системе, скормить их pkgfile, собрать список пакетов и список файлов для которых небыли найдены пакеты (для дальнейшего анализа)
у pkgfile своя база, которую нужно обновить.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
pkgfile
pacman -F
fuelen
/var/log/pacman.log не остался
nafanja
/var/log/pacman.log остался?
если нет, то писать скрипт
В Wiki написано
If it (имеется в виду /var/log/pacman.log) does not exist, it is not possible to continue with this method. You may be able to use Xyne's package detection script to recreate the database. If not, then the likely solution is to re-install the entire system.
И, как видно, дана ссылка на скрипт, но насколько он хорош, не знаю, даже не смотрел что он делает …. попробуй ...... смущает год 2009 ........ но в pacman, в этой части, думаю мало что изменилось ...
Ошибки не исчезают с опытом - они просто умнеют
$ sudo pacman -S ruby
перевіряння конфліктів між файлами…
пошук конфліктних пакунків…

Пакунки (18) bash-4.4.012-2  db-5.3.28-3  filesystem-2016.12-2  gcc-libs-6.3.1-1  gdbm-1.12-2  glibc-2.24-2  gmp-6.1.2-1  iana-etc-20161101-1  libffi-3.2.1-2  libyaml-0.1.7-1  linux-api-headers-4.7-1  ncurses-6.0+20170128-1  openssl-1.0.2.k-1  perl-5.24.1-1  readline-7.0.003-1  tzdata-2016j-1  zlib-1:1.2.11-1
             ruby-2.4.0-1

Повний розмір звантаження:    3,73 MiB
Загальний розмір встановлення:  215,86 MiB

:: Продовжити встановлення? [Y/n] n

 08:41:57  ✘  ~  ♦️ ruby-2.3.3 
$ sudo pacman -Fl ruby
попередження: database file for 'core' does not exist
попередження: database file for 'extra' does not exist
попередження: database file for 'community' does not exist
попередження: database file for 'archlinuxfr' does not exist
помилка: пакунок «ruby» не знайдено

для ключа -S пакеты есть, а для -F нет? pacman -Syy делал
скрипт от Xyne видел, запускал

Use of uninitialized value in concatenation (.) or string at ./test.perl line 7.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: ftp.archlinux.org
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: ftp.archlinux.org
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: ftp.archlinux.org

проще будет свое написать, чем в перле разбираться.
fuelen
скрипт от Xyne видел, запускал
А это не смущает ........
fuelen
0curl: (6) Could not resolve host: ftp.archlinux.org
а не пробовал изменить переменную в скрипте ......
my $url = 'ftp://ftp.archlinux.org/$repo/os/' . `arch`;
возможно и другие …..

fuelen
проще будет свое написать, чем в перле разбираться.
Хотя согласен, лучше написать свой скрипт, чем разбирать чужой, но для этого нужно четко знать, что необходимо получить на выходе

Ошибки не исчезают с опытом - они просто умнеют
простое перемещение my $url в цикл, замена адреса и ручное указание архитектуры сработало :)
#!/usr/bin/perl
use strict;
use warnings;

use File::Temp qw/tempdir/;

my @repos = qw/core extra community/;

my $tmpdir = tempdir(CLEANUP=>1);

foreach my $repo (@repos)
{
  my $url = 'ftp://gd.tuwien.ac.at/opsys/linux/archlinux/$repo/os/x86_64';
  chomp $url;
  my $files_url = $url;
  $files_url =~ s/\/\$repo\//\/$repo\//;
  $files_url .= '/' . $repo .'.files.tar.gz';
  `cd "$tmpdir" && curl "$files_url" | bsdtar -xf-`;
}
opendir(my $dh, $tmpdir) or die;
my @pkgs = readdir($dh);
close($dh);

my $l = 0;
foreach my $pkg (@pkgs)
{
  my $i = length($pkg);
  $l = $i if $i > $l;
}

foreach my $pkg (sort @pkgs)
{
  next if ($pkg eq '.' or $pkg eq '..');
  my @files = ();
  if (open(my $fh, '<', $tmpdir .'/'. $pkg .'/files'))
  {
    while (defined(my $line = <$fh>))
    {
      chomp $line;
      next if $line eq '%FILES%' or substr($line,-1) eq '/';
      push @files, '/' . $line;
    }
    close($fh);
    my $n = scalar @files;
    next if $n == 0;
    my $i = 0;
    foreach my $file (@files)
    {
      $i++ if -f $file;
    }
    printf("%-${l}s %3d%%\n", $pkg, 100*$i/$n);
  }
  else
  {
    print "error: failed to open $tmpdir/$pkg/files\n";
  }
}
fuelen
для ключа -S пакеты есть, а для -F нет?
Пакетная база - это одно, база файлов - другое.
# pacman -Fy
 
Зарегистрироваться или войдите чтобы оставить сообщение.