2016-09-28 86 views
-1

我有一個預製的目錄結構,我想從中創建rpm。 在我的規格文件我指定從目錄結構,我想在rpm到包括所有文件,以及執行的rpmbuild當我設置的buildroot到(從我可以告訴)正確的目錄:無法從spec文件生成rpm:未找到文件錯誤

%files 
/usr/local/bin/test/Test 
/usr/local/bin/test/something.awk 
/usr/share/snmp/mibs 
/etc/init.d/test 

我的rpmbuild命令如下:

rpmbuild --rmspec --buildroot=bin/<files dir> -bb bin/tmp.spec 

我的兩個規範文件的目錄的buildroot位置&是相對的。 目錄結構是這樣的:

/home/<me>/Projects/<project>/ <-- I execute rpmbuild from here 
/home/<me>/Projects/<project>/bin/tmp.spec 
/home/<me>/Projects/<project>/bin/<files dir>/ <-- All files/directories mentioned in spec file reside here 
/home/<me>/Projects/<project>/bin/<files dir>/usr/local/bin/test/Test 
/home/<me>/Projects/<project>/bin/<files dir>/usr/local/bin/test/something.awk 
/home/<me>/Projects/<project>/bin/<files dir>/usr/share/snmp/mibs/ <-- directory with a few MIB files, which I all want to include 
/home/<me>/Projects/<project>/bin/<files dir>/etc/init.d/test 

但是,執行的rpmbuild命令時,我得到了以下錯誤:

Processing files: <rpm> 
error: File not found: /bin/<files dir>/usr/local/bin/test/Test 
error: File not found: /bin/<files dir>/usr/local/bin/test/something.awk 
error: File not found: /bin/<files dir>/usr/share/snmp/mibs 
error: File not found: /bin/<files dir>/etc/init.d/test 


RPM build errors: 
    File not found: /bin/<files dir>/usr/local/bin/test/Test 
    File not found: /bin/<files dir>/usr/local/bin/test/something.awk 
    File not found: /bin/<files dir>/usr/share/snmp/mibs 
    File not found: /bin/<files dir>/etc/init.d/test 

該規範文件不包含任何%準備,%建立或%安裝指令,因爲完整的文件結構是在構建rpm文件之前預先製作的。 我相信這是我錯過的一些小事情,我懷疑這是一個rpmbuild使用不同於我指定的目錄的情況。 我一直在玩弄與周圍的buildroot的& _topdir指示,既相對&絕對路徑,但無濟於事...

+0

用實際的目錄名替換''......如果你真的想用'';你至少應該逃離這個空間...... –

+0

是匿名的。當然有一個實際的目錄名稱。 – ThaMe90

回答

2

在我看來,你是通過buildroot的語義混淆。 --buildroot選項和%{buildroot}宏指向構建根。讓我詳細說明一下:

%install部分,您位於您的源已被提取的目錄中(這已通過%setup宏在%prep部分完成)。現在您應該在構建根中創建文件/目錄結構。所以:

%install 
install -d %{buildroot}/usr/local/bin/test/ 
cp -a something.awk %{buildroot}/usr/local/bin/test/ 

這個假設something.awk是在Source0的tar.gz文件,它是在該歸檔的根(有在存檔中沒有主導路徑)。

%buildroot總是被定義的。並且通常以~/rpmbuild/BUILDROOT/%{name}-%{version}-%{release}.$arch的形式。當你用你的例子中的--buildroot=bin/<files dir>選項覆蓋它時,%install中的前面的腳本會將something.awk複製到'bin // usr/local/bin/test/something.awk'中。本身並不是錯誤,但也沒有意義。如果您以前將文件複製到./bin目錄中,那麼您應該知道%{buildroot}通常在%install部分之前被擦除。所以你必須將這些文件複製到本節中的'%{buildroot}'中。

那麼錯誤的原因是什麼?當你陳述:

%files 
/usr/local/bin/test/something.awk 

然後rpmbuild尋找文件%{buildroot}/usr/local/bin/test/something.awk。它不存在,所以rpmbuild產量「找不到文件」。所以你很明顯錯過了%install部分的操作。如果你添加它,那麼它會工作。您也可以省略--buildroot選項。

相關問題