macOS এ কিভাবে Firefox Build করা যায়?

S M Sarwar Nobin
4 min readOct 28, 2018

--

শুরুর গল্পটা এমন Software Engineering কোর্সে আমাদের জাহিদ স্যার প্রায়ই খোটা দিতেন আমার শিক্ষার্থীরা কেউ Open Source Code নিয়ে ঘাটাঘাটি করে না। কেউ Linux, Mozilla এসবের কোড খুলেও দেখে না। তখন থেকেই একটা জেদ কাজ করত। অন্তত একদিন কোড টা দেখব। কিছু না পারলেও কম্পাইল করব। কোর্স শেষে সেমিস্টার পার হয়ে যায় আর সময় হয় না। হঠাৎ এবারের পূজার ছুটিতে প্লান করলাম। তাও হত না যদি লন্ডনে MozFest 2018 এ চলে যেতাম। ভিসা জটিলতায় যাওয়া হল না। মন খারাপ। পরে হঠাৎ ভাবলাম এবার কাজটা করে ফেলি।

ব্যাস শুরু। শুরুতে জানতামও না এটাকে Build করা বলে। আমরা সাধারণত C/C++ এ Compile করে আসছি। অনেক ঘাটাঘাটি করে বের করলাম। Building Firefox for macOS নামে developer.mozilla.org নামে একটা আর্টকেলই আছে। ব্যাস কাজে নামলাম। আমার স্বভাব বেশি না পড়া। শুরুতেই খাইলাম ধরা। Mercurial থেকে নামায়েই build দিলাম। হয় না :(

অনেক ঘাটাঘাটি করলাম। Mozilla Bangladesh এর কমিউনিটি লিডার ম্যাক ভাইকে জ্বালালাম। ভাই অবশেষে বুদ্ধি শিখায়ে দিলেন Mozilla অফিসিয়াল Build Engineer দের নক দিতে। আর IRC ব্যবহার করতে। গত l10n এর ওয়ার্কশপে IRC ব্যবহার হাতে ধরায়ে শিখাইছিল। ব্যাস শুরু। উল্লেখ্য আমি NDA Signed Mozilla Reps এজন্য Build Engineer দের মেইল খুব সহজেই হাতে পেয়ে গেলাম। এবার মেইল করা শুরু। সাথে সাথে বেশ কয়েক জনের কাছে থেকে উত্তরও পেলাম। তারা IRC তে যোগাযোগ করতে বলে।

এর মধ্যে আমার ছোট ভাই আশিকও বেশ চেস্টা করল। ওর কমান্ড লাইনে দক্ষতা ভাল বেশ। কিন্তু কাজ হল না। এবার Build Engineer এর মেইল পেলাম।

শুরুতেই বলল তুমি Homebrew ইন্সটল দাও নাই। Homebrew নিয়ে ঘাটতেই চোখে পড়ল আর্টিকেলের নিচের অংশ One-Line Setup (Try This First!)। Homebrew হল macOS এর package manager। এবার স্টেপ বাই স্টেপ আগাতে লাগলাম। তবে এটা MacPorts দিয়েও হয়। এটাও package manager। আমি দুটোই ইন্সটল করে আবার গোলমাল বাধালাম।

ব্যাস কাজ হল না। পরে একজন Build Engineer বলল MacPorts আনইন্সটল দিতে। এবার আগালাম নতুন করে।

1. xcode আগেই ইন্সটল দেওয়া ছিল। লাগে নাই।
2.1. Install supplementary build tools: Homebrew ইন্সটল দিলাম।
brew install yasm mercurial gawk ccache python

এরপর দিলাম brew install autoconf@2.13 autoconf scripts configure করার টুল।

2.2 Install Mercurial: এবার Mercurial ইন্সটল দেওয়ার পালা।
brew install mercurial(Homebrew ব্যবহার করেছি তাই এভাবে)
ইন্সটল হইছে কিনা তা চেক করার জন্য hg version দিলাম। ঠিক ঠাক থাকলে ভার্সন দেখাবে।

3. Obtain a copy of the Mozilla source code: এবার Mercurial থেকে Mozilla source code নামানোর পালা। যে কোন একটা ফোল্ডারে যেয়ে
$ hg clone https://hg.mozilla.org/mozilla-central/ Mozilla-central
বেশ সময় লাগবে। তারপর হয়ে গেলে
$ cd Mozilla-central
মানে ফোল্ডারে ঢুকলাম।

4. Configure the Mozilla source tree for build options: এবার আরেক গুরুত্বপূর্ণ কাজ। source tree তে new file খুলব .mozconfig নামে। আমি এটাও কমান্ড লাইনেই করেছিলাম।

touch .mozconfig

এবার ফাইলটাকে টেক্সমোডে খুলব।
open -e .mozconfig

এই দুটো কমান্ড developer.mozilla.org তে নেই। আমি শিখছি ঘেটে। এবার ওই ফাইলে লেখবেন:
# Define where build files should go. This places them in the directory
# "obj-ff-dbg" under the current source directory
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff-dbg

# Enable debug builds
ac_add_options --enable-debug
ac_add_options --with-macos-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk

mk_add_options AUTOCONF=/usr/local/Cellar/autoconf@2.13/2.13/bin/autoconf213

এখানে উল্লেখ্য Mozilla এখনও MacOSX10.11.sdk ব্যবহার করে। এজন্য আপনাকে একটা কমান্ড দিয়ে /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs এটা খুলতে হবে। এজন্য নতুন একটা Terminal open করে
open /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

তাহলেই দেখবেন টুক করে একটা ফাইল ওপেন হয়ে যাবে। এবার সেখানে https://github.com/phracker/MacOSX-SDKs এখান থেকে MacOSX10.11.sdk নামায়ে আনজিপ করে রাখতে হবে।

এটা না করলে দেখবেন Build হলেও কালো স্ক্রিন আসবে। কিছু দেখতে পাবে না।

এবার কোড টা সেভ করুন .mozconfig তে। ব্যাস অনেক করছেন এবার একটা জিরায়ে নেন!

5. Build: এবার আসল কাজ।
./mach bootstrap

দিবেন আগে। এতে প্যাকেজটা রেডি হবে। কিছু Instruction ফলো করাতে হবে। খুবই সাধারণ। এবার মনের আনন্দে

./mach build

দেন। অনেক সময় লাগবে। প্রায় এক ঘন্টা। এরপর সব ঠিক থাকলে Your build was successful! কথা বলবে। এরপর আপনি লুঙ্গি ড্যান্স দিতে পারেন একটা ;)

এরপর জানেনই তো শুভ কাজে দেরি করতে নাই।
./mach run

দিয়ে ফেলুন আর উপভোগ করুন আপনার নিজের হাতের বিল্ডকৃত Mozilla Firefox!

এবার দাঁড়ান ;) এত সোজা না ;) এই |mach run| কথাটা আসতে অনেক হ্যাপা পোহাতে হবে :)

সমাধান দিচ্ছি! কিন্তু আগে শো অফ করে নেই ;)

https://paste.ubuntu.com/p/fGY2qRhqpQ/ মাত্র ৪৬ লাইন ;) এত সহজ না ;)

আসলে এখানে কয়েক হাজার লাইন আউটপুটই দিবে। আমার এখন না দেওয়ার কারণ আমি কয়েকবার বিল্ড করেছি।

এই সেই মেম সাহেবান ;)
এরকম ফাইল তৈরি হবে :)

এবার error আসলে কি করবেন?
https://wiki.mozilla.org/IRC এটা দেখে Mozilla IRC তে যোগ দিবেন। #introduction চ্যানেলে যোগ দিবেন। #firefox এও দিতে পারেন। কিন্তু Building এর জন্য #introduction এই সমাধান পাওয়া যায়। firefox এর অনেক প্রকৌশলীই আছে যারা আপনার আমার মত মূর্খদের সহায়তা করার জন্য বসে আছে।

আমি যে error গুলো পেয়েছিলামঃ
https://bugzilla.mozilla.org/show_bug.cgi?id=1494022
https://bugzilla.mozilla.org/show_bug.cgi?id=1493330
https://bugzilla.mozilla.org/show_bug.cgi?id=1446946
https://bugzilla.mozilla.org/show_bug.cgi?id=1306395
https://bugzilla.mozilla.org/show_bug.cgi?id=1342292

আর error যাই আসুক সেটা Google এ সার্চ করবেন।

IRC, Command line এর কিছু ধারণা আপনার থাকতে হবে। একটু ঘাটাঘাটি করলেই শিখতে পারবেন।

মনে রাখবেন কোন কাজই লিফটের মত উঠবে না। আপনাকে সিঁড়ি বেয়েই উঠতে হবে। মিনিমাম ২-৩ দিন সময় হাতে নিয়ে এবং প্রচ্চ্চুর error খাওয়ার মানসিকতা নিয়ে বসবেন। শুভ কামনা :)

আমি ধন্যবাদ জানাতে চাই আমার কোর্স শিক্ষক Dr. Mohammad Zahidur Rahman, Mozilla Bangladesh কমিউনিটির Mahay Alam Khan ভাই, Belayet Hossain ভাই, আমার ছোট ভাই Ashikur Rahman Ashik আর বিনম্র শ্রদ্ধা Mozilla এর প্রকৌশলী ও স্বেচ্ছাসেবকদের (নাম বলতে পারব না কারণ NDA আছে ;) )

সব শেষে আমার JU এর কয়েকজন সিনিয়র ভাই যাদের জন্যই Mozilla Bangladesh এর নাম শুনেছিলাম তাদেরও অনেক ধন্যবাদ।

সফল ভাবে Build করে Run করতে পারলে জানাতে ভুলেন না :)

--

--

S M Sarwar Nobin
S M Sarwar Nobin

Written by S M Sarwar Nobin

Graduate Research Assistant at UTRGV, USA and Freelance Email Signature Developer