{"id":849,"date":"2014-01-11T13:55:00","date_gmt":"2014-01-11T12:55:00","guid":{"rendered":"http:\/\/blog.rabahi.net\/?page_id=849"},"modified":"2014-08-04T17:49:00","modified_gmt":"2014-08-04T15:49:00","slug":"rpm-using-mock","status":"publish","type":"page","link":"https:\/\/blog.rabahi.net\/?page_id=849","title":{"rendered":"Build mock RPM Survival Guide"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Prerequistes\"><span class=\"toc_number toc_depth_1\">1<\/span> Prerequistes<\/a><\/li><li><a href=\"#Configuration\"><span class=\"toc_number toc_depth_1\">2<\/span> Configuration<\/a><ul><li><a href=\"#Create_tree\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Create tree<\/a><\/li><li><a href=\"#Source\"><span class=\"toc_number toc_depth_2\">2.2<\/span> Source<\/a><\/li><li><a href=\"#Create_spec_file\"><span class=\"toc_number toc_depth_2\">2.3<\/span> Create spec file<\/a><\/li><\/ul><\/li><li><a href=\"#Generation\"><span class=\"toc_number toc_depth_1\">3<\/span> Generation<\/a><ul><li><a href=\"#Generate_srcrpm\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Generate src.rpm<\/a><\/li><li><a href=\"#Generate_rpm\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Generate rpm<\/a><\/li><\/ul><\/li><li><a href=\"#Use_rpm\"><span class=\"toc_number toc_depth_1\">4<\/span> Use rpm<\/a><\/li><\/ul><\/div>\n<h1><span id=\"Prerequistes\">Prerequistes<\/span><\/h1>\n<p>Install <a href=\"?page_id=405\">mock<\/a><\/p>\n<h1><span id=\"Configuration\">Configuration<\/span><\/h1>\n<h2><span id=\"Create_tree\">Create tree<\/span><\/h2>\n<pre lang=\"bash\">\r\nrunuser -l builder -c \"mkdir -p \/home\/builder\/rpmbuild\/SPECS\"\r\nrunuser -l builder -c \"mkdir -p \/home\/builder\/rpmbuild\/SOURCES\"\r\nrunuser -l builder -c \"mkdir -p \/home\/builder\/rpmbuild\/SRPMS\"\r\nrunuser -l builder -c \"mkdir -p \/home\/builder\/rpmbuild\/RPMS\"\r\n<\/pre>\n<h2><span id=\"Source\">Source<\/span><\/h2>\n<p>In \/home\/builder\/rpmbuild\/SOURCES, we have to create a tar.gz containing all sources.<br \/>\nThis tar.gz file must have the parent node &#8216;myrpm-1.0&#8217;.<\/p>\n<pre lang=\"bash\">\r\nrunuser -l builder -c \"mkdir -p \/home\/builder\/rpmbuild\/SOURCES\/myrpm-1.0\"\r\nrunuser -l builder -c \"touch \/home\/builder\/rpmbuild\/SOURCES\/myrpm-1.0\/helloworld.txt\"\r\nrunuser -l builder -c \"cd \/home\/builder\/rpmbuild\/SOURCES && tar cvfz myrpm-1.0.tar.gz myrpm-1.0\"\r\n<\/pre>\n<h2><span id=\"Create_spec_file\">Create spec file<\/span><\/h2>\n<p>In the spec file, it is recommanded to use macros.<br \/>\nWe can find the list of all macros here: \/usr\/lib\/rpm\/macros<\/p>\n<p>Let&#8217;s create the file \/home\/builder\/rpmbuild\/SPECS\/myrpm.spec<\/p>\n<pre lang=\"bash\">\r\nName:\t        myrpm\r\nVersion:        1.0\t\r\nRelease:\t1%{?dist}\r\nSummary:        Summary of %{name}\t\r\nGroup:\t        System Environment\/Base\t\r\nLicense:        MIT\r\nSource0:        {name}-%{version}.tar.gz\r\nBuildRoot:\t%{_tmppath}\/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)\r\n\r\n# Package required on build (under mock)\r\nBuildRequires:  sudo\r\n\r\n# Package required on install\r\nRequires:       dos2unix\t\r\n\r\n%description\r\nDescription of %{name}\r\n\r\n%prep\r\n# prepare package\r\n\r\n%setup -q\r\n# unzip package\r\n\r\n%build\r\n# build\r\n\r\n%install\r\n%{__rm} -rf %{buildroot}\r\n# create directory : under mock %{buildroot} is empty, so we must create all tree.\r\n%{__mkdir_p} %{buildroot}\/opt\/rabahi.net\/example\r\n# now we can copy the file helloworld.txt (at the root, under {name}-%{version}, of our tar.gz)\r\n%{__cp} -f helloworld.txt %{buildroot}\/opt\/rabahi.net\/example\/helloworld.txt\r\n\r\n%post\r\n# post installation\r\n# we are under the final tree.\r\n# so, we won't use %{buildroot}\r\ndos2unix \/opt\/rabahi.net\/example\/helloworld.txt\r\n\r\n%clean\r\nrm -rf %{buildroot}\r\n\r\n%files\r\n# In files, we list and set permissions on files.\r\n# Example here: root is the owner\r\n%defattr(-,root,root,-)\r\n%doc\r\n\r\n%changelog\r\n<\/pre>\n<h1><span id=\"Generation\">Generation<\/span><\/h1>\n<h2><span id=\"Generate_srcrpm\">Generate src.rpm<\/span><\/h2>\n<pre lang=\"bash\">\r\n# Note: First do a 'su builder' or use 'runuser -l builder -c \"<cmd>\"\r\nmock -r epel-6-x86_64 \r\n     --spec=\/home\/builder\/rpmbuild\/SPECS\/myrpm.spec \r\n     --sources=\/home\/builder\/rpmbuild\/SOURCES \r\n     --resultdir=\/home\/builder\/rpmbuild\/SRPMS \r\n     --buildsrpm\r\n<\/pre>\n<h2><span id=\"Generate_rpm\">Generate rpm<\/span><\/h2>\n<pre lang=\"bash\">\r\n# Note: First do a 'su builder' or use 'runuser -l builder -c \"<cmd>\"\r\nsetarch x86_64 mock \r\n        -r epel-6-x86_64 \r\n        rebuild \/home\/builder\/rpmbuild\/SRPMS\/myrpm-1.0-1.el6.src.rpm \r\n        --resultdir=\/home\/builder\/rpmbuild\/RPMS\r\n<\/pre>\n<h1><span id=\"Use_rpm\">Use rpm<\/span><\/h1>\n<ol>\n<li>Publish it to your <a href=\"?page_id=612\">repository<\/a><\/li>\n<li>Install it:\n<pre lang=\"bash\">yum install myrpm<\/pre>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 Prerequistes2 Configuration2.1 Create tree2.2 Source2.3 Create spec file3 Generation3.1 Generate src.rpm3.2 Generate rpm4 Use rpm Prerequistes Install mock Configuration Create tree runuser -l builder -c &#8220;mkdir -p \/home\/builder\/rpmbuild\/SPECS&#8221; runuser -l builder -c &#8220;mkdir -p \/home\/builder\/rpmbuild\/SOURCES&#8221; runuser -l builder -c &#8220;mkdir -p \/home\/builder\/rpmbuild\/SRPMS&#8221; runuser -l builder -c &#8220;mkdir -p \/home\/builder\/rpmbuild\/RPMS&#8221; Source In \/home\/builder\/rpmbuild\/SOURCES, we have [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":440,"menu_order":9,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-849","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=849"}],"version-history":[{"count":16,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/849\/revisions"}],"predecessor-version":[{"id":1047,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/849\/revisions\/1047"}],"up":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/440"}],"wp:attachment":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}