Я так и не смог загрузить сервер, ни был кем-либо еще на сайте, кто знает что-либо о Linux. Мы восстановили установку и приняли значения по умолчанию CentOS, обеспеченный после выбора опции 'Use all Space'. По-видимому, установка Ваших собственных разделов работала. Я установил разделы сотни времени в других системах без проблем, но этой установке CentOS не нравилось это. Не уверенный, если кто-либо еще столкнулся с этим или не, но это - что-то, чтобы рассмотреть, сталкивается ли кто-либо еще с той же проблемой при выполнении установки путем, я сделал.
Вам будет нужен patchutils, установленный для этого.
Этот сценарий разделит один большой патч на меньшие отдельные патчи, каждого из них содержащий только один ломоть для одного файла. Можно затем применить эти патчи с patch --forward
.
#!/bin/sh -eu
PATCH=$1
OUTDIR=$2
test -f "$PATCH" && test -d "$OUTDIR"
TDIR=$(mktemp -d)
trap 'rm -rf $TDIR' 0
INDEX=0
TEMPHUNK=$TDIR/current_hunk
lsdiff $1 | while read FNAME
do
HUNK=1
while :
do
filterdiff --annotate --hunks=$HUNK -i "$FNAME" "$PATCH" > "$TEMPHUNK"
HUNK=$((HUNK+1))
test -s "$TEMPHUNK" && \
{
mv "$TEMPHUNK" "$OUTDIR/$INDEX.diff"
INDEX=$((INDEX+1))
} || break
done
done
Править: сохраните сценарий к hunks.sh
, и назовите его:
./hunks.sh path/to/big.diff path/to/output/directory
Я в конечном счете решил это использование решения, подобного artyom's.
Шаг 1: Взорвите патч в большое количество отдельных патчей, один для каждого ломтя.
Я использовал этот сценарий, чтобы сделать это:
#!/usr/bin/python2
import sys
header = []
writing_header = False
patchnum = 0
patch = open(sys.argv[1], "r")
out = open("/dev/null", "w")
for line in patch.readlines():
if line.startswith("diff"):
header = []
writing_header = True
if line.startswith("@@"):
out.close()
out = open(str(patchnum) + ".diff", "w")
patchnum += 1
writing_header = False
out.writelines(header)
if writing_header:
header.append(line)
else:
out.write(line)
out.close()
Использование в качестве примера:
$ cd directory_containing_patch
$ mkdir foo
$ cd foo
$ explode.py ../huge_patch.diff
Это заполнит текущий каталог с файлами, названными 0.diff 1.diff и так далее.
Шаг 2: Примените каждый патч, уже отбросив применяемые патчи.
Я использовал этот сценарий, чтобы сделать это:
#!/bin/bash
if [[ $# -ne 1 || ! -d "${1}/" ]]; then
echo "Usage: $0 dirname"
exit 1
fi
find "$1" -name \*.diff | while read f; do
OUTPUT=$(patch -s -p1 -r- -i"$f")
if [ $? -eq 0 ]; then
rm "$f"
else
if echo "$OUTPUT" | grep -q "Reversed (or previously applied) patch detected!"; then
rm "$f"
fi
fi
done
Использование в качестве примера:
$ cd directory_containing_code
$ apply_patches.bash directory_containing_patch/foo
Это удалит любой из ранее сгенерированных патчей, которые применяются чисто или которые были уже применены. Любые патчи оставлены внутри foo
отклонения, которые должны быть вручную исследованы и объединены.