drBatty писал(а): ↑30.04.2011 16:11
Я вижу. Вы хотите ставить пакеты БЕЗ ЭЦП, просто так. Правильно?
........
как вас ещё убедить в том, что вы рассадник заразы собрались сделать?
Давайте на примере.
Есть такая очень удобная для меня утилита - AtomicParsley, но пакета под fedora я не нашел.
Предположим, в сети я нашел пакет AtomicParsley-0.9.0-1.fc14.src.rpm, в нем три файла:
- AtomicParsley.spec
AtomicParsley-source-0.9.0.zip
AtomicParsley-fix_bad_math.patch
т.е. spec, исходник и патч.
1. Смотрим spec:
Код: Выделить всё
Name: AtomicParsley
Version: 0.9.0
Release: 1%{?dist}
License: GPLv2+
Summary: Command-Line Program to Read and Set MP4 Metadata Tags
Source: http://prdownloads.sourceforge.net/atomicparsley/%{name}-source-%{version}.zip
Patch0: AtomicParsley-fix_bad_math.patch
URL: http://atomicparsley.sourceforge.net
Group: Applications/Multimedia
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: libstdc++-devel
BuildRequires: glibc-devel
BuildRequires: unzip
%description
AtomicParsley is a lightweight command line program that can read and set
metadata tags in MPEG-4 files & 3gp assets in 3GPP/3GPP2 files.
%prep
%setup -q -n "%{name}-source-%{version}"
%patch0
%__sed -i '
s/g++/$CXX/g;
s/-g//g;
s/-O2/$OPTFLAGS/g;
' build
%__sed -i '1aset -e' build
%build
CXX="%__cxx" \
OPTFLAGS="%{optflags} -Wall -Wno-deprecated -fno-strict-aliasing" \
./build
%install
%__install -D -m0755 %{name} "%{buildroot}%{_bindir}/%{name}"
%clean
%__rm -rf "%{buildroot}"
%files
%defattr(-,root,root,-)
%doc COPYING
%doc *.rtf
%{_bindir}/%{name}
%changelog
2. Читаем про программу (ей пользуются разработчики ffmpeg - надеюсь этим все сказано). По ссылке указанной в Source берем исходник (Параноики могут просмотреть весь код).
3. смотрим патч AtomicParsley-fix_bad_math.patch:
Код: Выделить всё
--- AtomicParsley.cpp.orig 2010-07-23 00:42:26.000000000 +0200
+++ AtomicParsley.cpp 2010-07-23 00:54:36.000000000 +0200
@@ -1447,7 +1447,7 @@
uint32_t atom_offsets = 0;
char* uuid_outfile = (char*)calloc(1, sizeof(char)*MAXPATHLEN+1); //malloc a new string because it may be a cli arg for a specific output path
if (output_path == NULL) {
- char* orig_suffix = strrchr(originating_file, '.');
+ const char* orig_suffix = strrchr(originating_file, '.');
if (orig_suffix == NULL) {
fprintf(stdout, "AP warning: a file extension for the input file was not found.\n\tGlobbing onto original filename...\n");
path_len = strlen(originating_file);
@@ -4030,21 +4030,21 @@
//+8 so that 'free' can be accommodated; can't write a 'free' atom of length = 5 - min is 8; OR it disappears entirely
if ( (int)udta_dynamics.max_usable_free_space >= userdata_difference + 8 ||
userdata_difference <= -8 ||
- ( (int)udta_dynamics.max_usable_free_space >= 8 && -8 < userdata_difference < 0 ) ||
+ ( (int)udta_dynamics.max_usable_free_space >= 8 && -8 < userdata_difference && userdata_difference< 0 ) ||
(int)udta_dynamics.max_usable_free_space == userdata_difference) {
//fprintf(stdout, "Dynamically update possible: change = %i, free = %i\n", userdata_difference , udta_dynamics.max_usable_free_space);
if (!moov_atom_was_mooved) { //only allow dynamic updating when moov precedes any mdat atoms...
udta_dynamics.dynamic_updating = true;
} else {
//if there is insufficient padding when moov is rearranged to precede mdat, add default padding
- if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
+ if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space && udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
APar_ForcePadding(pad_prefs.default_padding_size);
}
APar_DetermineAtomLengths();
return;
}
//fprintf(stdout, "I'm here %u , %u, %i - %i\n", udta_dynamics.max_usable_free_space, pad_prefs.default_padding_size, udta_dynamics.free_atom_repository, udta_dynamics.free_atom_secondary_repository);
- if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
+ if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space && udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
APar_ForcePadding(pad_prefs.default_padding_size);
}
if (pad_prefs.minimum_required_padding_size > udta_dynamics.max_usable_free_space) {
@@ -4462,7 +4462,7 @@
#endif
void APar_DeriveNewPath(const char *filePath, char* temp_path, int output_type, const char* file_kind, char* forced_suffix, bool random_filename = true) {
- char* suffix = NULL;
+ const char* suffix = NULL;
if (forced_suffix == NULL) {
suffix = strrchr(filePath, '.');
} else {
@@ -4480,7 +4480,7 @@
memcpy(temp_path, filePath, base_len);
memcpy(temp_path + base_len, file_kind, strlen(file_kind));
#else
- char* file_name = strrchr(filePath, '/');
+ const char* file_name = strrchr(filePath, '/');
size_t file_name_len = strlen(file_name);
memcpy(temp_path, filePath, filepath_len-file_name_len+1);
memcpy(temp_path + strlen(temp_path), ".", 1);
@@ -5006,7 +5006,7 @@
free_modified_name = true;
if (forced_suffix_type == FORCE_M4B_TYPE) { //using --stik Audiobook with --overWrite will change the original file's extension
uint16_t filename_len = strlen(m4aFile);
- char* suffix = strrchr(m4aFile, '.');
+ const char* suffix = strrchr(m4aFile, '.');
memcpy(originating_file, m4aFile, filename_len+1 );
memcpy(originating_file + (filename_len - strlen(suffix) ), ".m4b", 5 );
}
Тут невооруженным глазом видно - "заразы" нет. Есть 7 исправлений, что это за исправления, я думаю понятно.
4. Собираем бинарный пакет и ставим пакет в систему.
- Ткните пальцем, где бы Вы могли (чисто теоретически) подсунуть мне "заразу"!
- Собственно вот, практически я поделися пакетом в этом посте - кому от этого стало хуже? Где тут зло обращенное к другим и всему сообществу в целом?