Giờ có chút "liên quan" copy lại note từ hồi Yahoo! 360. Là một số thứ mình note từ 2005-2006, khi có blog :D. Nói chung từ nhiều nguồn, 1 số thông tin theo kiểu "truyền thuyết" cũng có.
Chừng 15 năm từ ngày đụng vào Linux, cá nhân mình thì không bao giờ cho rằng Linux phù hợp với PC (chạy được nhưng ko bao giờ thấy ổn). Cứ xài Microsoft Offce vs OpenOffice hay LibreOffice rồi cảm nhận. Sự khác biệt cũng từa tựa như vậy.
----------------------------
Unix
----------------------------
Unix là một OS đa nhiệm, đa người dùng được phát triển vào năm 1969 bởi AT&T tại phòng thí nghiệm Bell Labs. Hầu hết đều được phát triển để chạy tối ưu trên một hoặc một nhóm kiến trúc phần cứng nhất định. Unix cũng thiết kế để phù hợp với yêu cầu và hoạt động cụ thể của doanh nghiệp.
Hơn nữa Unix cung cấp kernel dưới dạng nhị phân và thường phân phối dạng monolithic (monolithic = nguyên khối). Tức ít có chuyện module mo điếc gì cả, ít có chuyện customize, chọn softwares ... (:D mua thì mua ko mua thì biến, no chê đắt)
----------------------------
Open Group và SUS
----------------------------
Các version của Unix đóng nhưng nhiều hệ thống vẫn được gọi chung là Unix. Thương hiệu Unix là mở?
Unix là tên được đăng ký thương hiệu và sở hữu bởi Open Group. Open Group đưa ra một bộ tiêu chuẩn cho OS là Single UNIX Specification (SUS). OS nào đạt được các tiêu chuẩn này,
đăng ký thì sẽ được gọi là Unix. Một số OS có thể kể IBM AIX, HP UX, SCO Unixware, SCO OpenServer, Sun Solaris, Mac OS X (on Intel processors).
Một vài OS ko thỏa mãn SUS nhưng giống Unix thường được gọi là Unix-like như BSD, FreeBSD.
Mac OS X được phát triển từ BSD tới NextStep vốn ko thỏa mãn SUS, nhưng sau khi điều chỉnh lại thỏa mãn SUS được gọi là Unix-based (mang thương hiệu Unix, tên mỹ miều Unix-based graphical interface operating systems (OS) developed and marketed by Apple Inc.).
Xem ví dụ trên website của Open Group
http://www.opengroup.org/openbrand/register/
The Open Brand - Register of Certified Products
UNIX 03
Company Name: Apple Inc.
Product Name: Mac OS X Version 10.5 Leopard
Environment: on Intel-based Macintosh computers
Registered on: 18-May-2007
Unix là một OS đóng (tính chất đóng) vậy "ban đầu" lấy đâu ra Unix-like. Thực sự ban đầu Unix cung cấp cho các trường ĐH và các doanh nghiệp có nhu cầu với đầy đủ thiết kế và công cụ. Thậm chí các tổ chức này còn được cung cấp các ví dụ và cả source code. Vì vậy các trường ĐH và các công ty có cơ sở để có thể viết lại nguyên HĐH.
Kể từ năm 80s, một số nhóm/công ty đã phát triển những OS có triết lý thiết kế gần giống với Unix (Unix philosophy) cũng gọi là Unix-like chứ ko phải từ source code hay thiết kế.
Hỏi ngu: đem Linux distro nào đó điều chỉnh xong đăng ký thành Unix-based được ko? Trả lời ko? Đã ko thích nhau thì chơi với nhau làm gì. Mà có thích cũng ko có tiền. Source code đổi như chong chóng, cứ ra release mới đem đăng ký thì tiền đâu? free chắc có tiền trên trời rơi xuống?
----------------------------
GNU/Linux
----------------------------
Linux bản thân là một kernel, core của OS (không phải là một OS: không có shell; không có bootloader GRUB, LILO, syslinux; không có môi trường desktop GNOME, KDE hay cũng ko có
init system-hệ thống khởi tạo như init, upstart, systemd).
GNU ban đầu là tham vọng của FSF (Tổ chức Phần mềm Tự do) nhằm xây dựng một tập hợp các free softwares bao gồm cả kernel, nói chung gói gọn là một OS giống Unix nhưng tự do (tự do: về tiền và free nhiều thứ, tự do vs miễn phí). Xem thêm khái niệm tương thích interface với Unix - POSIX Portable Operating System Interface for Unix.
Phân biệt free softwares vs open source softwares
Thực tế GNU ra đời từ lâu (1983) đã phát triển một bộ gần hết các công cụ và phần mềm "tự do" để sử dụng với Unix bao gồm 1 đống softwares, utilities nhưng mãi vẫn chưa có OS (chính xác là kernel OS). Đến năm 1991, GNU project đã hoàn thành 1 số phần công việc để build GNU operating system như GCC (GNU C compiler), GNU shell utilities (rất nhiều shell utilities), bash command-line shell, text editor. Về graphical desktop có thể "xài ké" các nguồn mở có sẵn như X Window System bỏ vào. Tuy nhiên core của OS là GNU Hurd kernel đã tiến hành phát triển nhưng chưa xong
(tham vọng làm microdesign kernel và bị delay, sau hơn 25 năm GNU Hurd kernel chưa release, nói cho đúng là ko có một stable version nào được release). Kernel là một mảnh còn thiếu của GNU.
Khi Linux join GNU Project thì GNU coi như là đã đầy đủ (năm 1991). Khi đó một phân phối sẽ gom nhân Linux, các softwares và utilities GNU, thêm giao diện X Window System ... sẽ tạo thành một hệ điều hành hoàn chỉnh.
Tất nhiên phải nói cho rõ khi Linux phát triển thì được nhiều cá nhân/nhóm/công ty gọi chung là cộng đồng đóng góp. Trong đó FSF vẫn đóng góp nhiều nhất (kể cả về cộng đồng, công cụ, định hướng, triết lý ...)
----------------------------
GNU/Linux hay Linux hay cái gì nữa ...
----------------------------
Nếu gọi là GNU/Linux thì gây ra tranh luận quá tập trung vào GNU. Nếu vậy có thể phải ghi là
Mozilla/KDE/Apache/X.org/GNU/Linux vì một distributions ít nhất cũng bao gồm các bác organizations bự bự như thế.
Richard Stallman- ý kiến của boss GNU (founded Free Software Foundation)
Hàng triệu người dùng sử dụng OS đã được phát triển nhằm đem tới sự tự do (ý nói đã được GNU định hướng phát triển)- nhưng mà éo biết điều đó, bởi họ nghĩ rằng hệ thống là Linux (system is Linux) và nó được phát triển bởi một sinh viên (Linus Torvalds, sinh viên University of Helsinki) chỉ để cho vui 'just for fun'.
Xem Linus Torvalds nói vụ này
https://groups.google.com/forum/?fromgroups=#!msg/comp.os.linux.misc/Cm15HxjDGRs/su3OHyLUgXcJ
Linus Torvalds trả lời năm 1996
Thảo luận vấn đề này là đã đủ lâu (:D lâu và chắc nhiều). Nó ko phải là vấn đề thực sự, tức người ta gọi là Linux thì kệ nó đi vì credit vẫn ghi rõ ràng (cho cả 2). Nhưng mà cá nhân thì tao thích gọi nó là Linux.
----------------------------
Còn gì khác? Popular OS?
----------------------------
TRON (The Real-time Operating system Nucleus) là open real-time operating system kernel design.
Nhiều cơ sở để cho rằng trong 1 thời gian rất lâu không phải Microsoft, cũng ko phải các Linux distro hay Unix là OS phổ biến nhất. Khoảng những năm 2003, Industrial TRON (ITRON) mới là OS phổ biến nhất thế giới (nếu coi là OS), chạy trên hàng tỷ các thiết bị điện tử.
TRON ra đời năm 1984, từ những thiết kế của Prof. Dr. Ken Sakamura, University of Tokyo.
TRON với nhiều ưu thế vượt trội từng vì nhiều lý do bao gồm cả "chính trị" đã ko được phát triển cho PC (bị dìm cho chết). Do may mắn (hay do đưa đẩy) TRON phần nhiều phổ biến trên các thiết bị điện tử như đồ gia dụng.
http://www.linuxinsider.com/story/31855.html
Năm 1989, hãng điện tử "khổng lồ" Nhật Bản Matsushita Electric Industrial Co. (1918-2008, tên sau này là Panasonic) giới thiệu BTRON PC, một PC gây "choáng váng" ngành công nghiệp với khả năng tiên tiến của nó (ngon hơn MS-DOS -> Windows 3.1x). Các BTRON PC dùng chip 80286 Intel 8 MHz và có 2 MB bộ nhớ, nhưng có thể hiển thị video màu chuyển động trong một cửa sổ riêng biệt (giao diện đồ họa- GUI).
Ngoài ra, hệ thống dual-boot cho phép chạy cả hai hệ điều hành BTRON và MS-DOS.
BTRON đã từng có "cơ hội" để chiếm một phần thị phần OS dành cho desktop trên thị trường.
Khi chính phủ Nhật Bản (ủng hộ của MITI- Ministry of International Trade and Industry và MOE) tuyên bố sẽ cài đặt BTRON PC trong các trường học của Nhật Bản, chính phủ Mỹ (đầu tiên là USTR) đã phản đối và coi "sáng kiến "của Nhật Bản là "thực tế và có tiềm năng can thiệp thị trường"
đồng thời đe dọa trừng phạt nếu kế hoạch này được thực hiện.
Do phụ thuộc thị trường xuất khẩu Mỹ, Nhật Bản đã "nhanh chóng" bỏ kế hoạch này. Kéo theo đó là những thiệt hại cho TRON. Gần như tất cả các công ty Nhật Bản tham gia vào các hoạt động liên quan đến TRON đã "tự động" hủy bỏ các dự án.
Từ trước đó, Microsoft bị nghi là đã tác động để U.S. government "chơi" TRON
(nhiều tác giả kêu chính là nó chứ khỏi nghi- với nhiều bằng chứng lịch sử). Microsoft được cho là sợ TRON khi đó sẽ "phá" thống trị của NEC Corp. (đang chạy MS-DOS) tại thị trường PC ở Nhật.
Chưa kể có cả nghi ngờ "bóng dáng" U.S Army liên quan trong vụ tai nạn JAL123 ngày 12/8/1985 chết 520 người (thuộc loại nhiều bí ẩn và lớn nhất thế giới). Vụ JAL123 bị nghi ngờ ko phải tai nạn thông thường mà là kết quả "cuộc chiến" với nhiều thành phần (SDF, U.S Army, NSA, cả Nga...)
Mỹ là nghi can "ám sát" 4 doanh nghiệp lớn nhất vùng Kansai (đại diện cộng đồng doanh nghiệp Kansai). Các cty này phản đối Plaza Accord và nghe nói còn ủng hộ phát triển công nghệ hạt nhân nội địa (nghe đâu mang trên máy bay kỹ thuật, thiết bị hạt nhân và đầu đạn hạt nhân...). Trong vụ này 17 technicians TRON OS quan trọng của Matsushita (Panasonic) cũng "ra đi".
Thỏa ước Plaza Accord (hay hiệp định) giữa Mỹ, Nhật Bản, Đức (Tây Đức), Anh và Pháp (G5) ký tại Plaza, New York 22/09/1985 mục đích chính giảm giá USD so với Yên Nhật và Mark Đức.
(cơ bản hạn chế thâm hụt thương mại với Nhật, hàng Mỹ ko thành công tại thị trường Nhật).
May mắn Industrial TRON (ITRON) nhờ ít liên can (focus vào hệ thống công nghiệp và embedded systems trong khi BTRON là business và education) nên sống sót tốt hơn. ITRON vẫn chạy trên nhiều các tiện ích của Nhật Bản, thiết bị gia dụng, thiết bị điện tử ô tô, robot, trên cả các vệ tinh.
http://www.ertl.jp/ITRON/home-e.html
Bất ngờ, năm 2003, Microsoft tham gia T-Engine Forum (xem danh sách thành viên trên http://www.t-engine.org, website giờ là http://www.tron.org)
So sánh với RTLinux (hard realtime RTOS microkernel)
Có nhiều tranh luận cho rằng ITRON có hiệu suất về thời gian vượt trội và do thiết kế TRON là một RTOS thực sự còn RTLinux thì ko real-time. Ngoài ra RTLinux footprint tính bằng MB, ITRON chỉ tính bằng KB.
----------------------------
The GNU C Library (glibc)
----------------------------
https://www.gnu.org/software/libc/download.html
libc6 và glibc là cùng một version của libc là version 2 của GNU C library nhưng là version 6 của Linux C library. GNU C Library gọi thông dụng là glibc là một dự án của GNU implement thư viện C chuẩn C standard library. C standard library là thư viện chuẩn của ngôn ngữ C, còn gọi là thư viện ANSI C (ANSI C standard).
Khi được chuẩn hóa (ví dụ C99 theo ISO/IEC 9899:1999) có thể gọi là thư viện chuẩn ISO: ISO C library. Có nhiều cài đặt như BSD libc, GNU C Library glibc, Microsoft run-time library msvcrt ...
Mặc dù gọi là C library nhưng hiện tại support cả C++ (và các ngôn ngữ khác).
Fork "Linux libc"
Những năm 1990s, Linux kernel (developers phát triển Linux kernel) forked glibc và gọi là "Linux libc" và maintained riêng từ version 2 đến version 5.
Đến khi FSF released glibc 2.0 vào 1997 chuẩn hơn, POSIX ok hơn, Linux kernel developers bỏ fork và quay lại glibc. Theo Richard Stallman thì code của Linux libc không thể merged vào glibc vì 1 số lý do quan trọng nhất là vấn đề không rõ ràng về authorship (quyền tác giả).
Khi glibc mà bị gì thì ảnh hưởng nguyên 1 đám "đi theo" từ Linux, smartphones đến IoT.
Xem thêm http://www.infosecurity-magazine.com/news/glibc-flaw-affects-linux-machines/
----------------------------
Firmware, Linux firmware
----------------------------
Nhiều devices (hardware) gồm 2 phần "software" chính để hoạt động trên OS.
+ Driver để system nói chuyện với hardware
+ Firmware thường uploaded trực tiếp vào device (một dạng lập trình cho hardware mà nằm trên device hay có thể gọi là embedded software). Ban đầu firmware có thể nằm để sẵn trên device's ROM sau này là Flash memory. Trên Linux thì thông thường firmware có thể được nạp bởi driver vào device khi initialization.
Ranh giới 2 thằng firmware và software không cụ thể lắm, firmware thường thao tác với các operation low-level.
----------------------------
Debian GNU/Linux
----------------------------
Debian là một trong những Linux distributions ra đời sớm nhất. Bản stable (ổn định) phát hành chính thức có tên là Debian GNU/Linux xây trên nhân Linux + 1 số công cụ hệ thống khác.
Hiện tại Debian xài 1 số nhân khác như FreeBSD, kFreeBSD ví dụ Debian GNU/kFreeBSD.
Hầu hết Debian phân phối tuân theo GNU General Public License.
Nhiều OS xây trên Debian như Ubuntu, Knoppix, Linux Mint. Debian nổi tiếng với trình quản lý package Advanced Packaging Tool-APT và hệ thống các chính sách kiểm tra nghiêm ngặt chất lượng các package, quá trình phát triển, phiên bản...
Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts
2016-08-07
2014-02-04
Create a .deb Debian package (tạo một package.deb)
Để tạo một .deb package có thể tham khảo các tài liệu
How to create Debian packages
How to create Debian packages
Mình chỉ tóm tắt thôi, nó gồm các bước như sau:
- Tạo thư mục dạng ${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}, ví dụ your-app_0.4.5-r5_i386.
Nếu build .deb cho Ubuntu có thể chỉ định thêm Ubuntu version ví dụ your-app_0.4.5-r5ubuntu1_i386 có nghĩa là version 1 dành cho Ubuntu build từ version 0.4.5-r5 dành cho Debian.
- Tạo các subdirectories cho các file sẽ install, ví dụ:
/usr/bin ‣ your-app
/usr/lib/nautilus/extensions-03 ‣ chứa extension cho Nautilus như libnautilus-your-app.so
/usr/share/doc, /usr/share/man ‣ chứa file help, manual
/usr/share/locale ‣ file ngôn ngữ, /usr/share/menu.
/opt/your-app/logo_32.xpm
- Tạo thư mục DEBIAN trong package directory. Trong thư mục DEBIAN chứa các file như control, conffile, md5sums, postinst, postrm, preinst, prerm. Có thể tham khảo từ các .deb package khác bằng cách extract nội dung các .deb có sẵn. Thông thường các .deb được cache trong /var/cache/apt/archives.
Để xem .deb có nội dung gì có thể dùng ar –t ví dụ
ar -t /var/cache/apt/archives/firefox_15.0.1+build1-0ubuntu0.11.10.1_i386.deb.
Để extract dùng ar –x sau đó dùng tar để xem nội dung các file nén.
Có thể dùng tool dpkg-deb để extract nội dung file .deb, eg.
dpkg-deb -x .../app.deb ~/workspace/app dpkg-deb -e .../app.deb ~/workspace/app/DEBIAN
- Nội dung file DEBIAN/control có thể giống file control của các app khác, chỉ cần chỉnh sửa 1 số field.
- File DEBIAN/postinst là một script sẽ run bởi dpkg –i sau khi các file trong package được extract. Post-install bắt đầu bằng
#! /bin/sh Để bảo đảm nếu có error phát sinh, script nên return non-zero exit code bằng set –e để shell exit ngay command đầu tiên không thành công.
- File DEBIAN/preinst pre-install
- File DEBIAN/prerm pre-remove
- File DEBIAN/postrm post-remove
- Xóa tất cả các file backup *~, nhất là các file trong DEBIAN/*~
rm -rf `find package-dir -name '*~'`
- Tạo file md5sums chứa checksum MD5 cho tất cả các file trong package bằng command
md5sum `find . -type f | grep -v '^[.]/DEBIAN/'` > DEBIAN/md5sums
Chạy command trong thư mục chứa DEBIAN.
- Giá trị của field Installed-Size: là số cuối cùng trong output của command du chạy trong package directory (lưu ý remove backup file). Có thể chỉ summarize kết quả với command như sau:
du -sx --exclude DEBIAN package-dirname -s, --summarize ‣display only a total for each argument -x, --one-file-system ‣skip directories on different file systems
- Build .deb package bằng
fakeroot dpkg-deb –b|--build package-dir
-
Kiểm tra bằng
lintian package-name.deb
-
Để install .deb package chỉ cần double click, dùng command như sau
sudo dpkg -i package-file.deb
Để uninstall dùng command
sudo dpkg -r package-name
2012-09-06
Linux - Embedding a file in an executable
Original http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967
Embedding a File in an Executable, aka Hello World, Version 5967
Jun 12, 2008 By Mitch Frazier
I recently had the need to embed a file in an executable. Since I'm working at the command line with gcc, et al and not with a fancy RAD tool that makes it all happen magically it wasn't immediately obvious to me how to make this happen. A bit of searching on the net found a hack to essentially cat it onto the end of the executable and then decipher where it was based on a bunch of information I didn't want to know about. Seemed like there ought to be a better way...
And there is, it's objcopy to the rescue. objcopy converts object files or executables from one format to another. One of the formats it understands is "binary", which is basicly any file that's not in one of the other formats that it understands. So you've probably envisioned the idea: convert the file that we want to embed into an object file, then it can simply be linked in with the rest of our code.
Let's say we have a file name data.txt that we want to embed in our executable:
Now that we have an object file we only need to include it when we run the linker:
The code to actually use the embedded file should now be reasonably obvious:
One important and subtle thing to note is that the symbols added to the object file aren't "variables". They don't contain any data, rather, their address is their value. I declare them as type char because it's convenient for this example: the embedded data is character data. However, you could declare them as anything, as int if the data is an array of integers, or as struct foo_bar_t if the data were any array of foo bars. If the embedded data is not uniform, then char is probably the most convenient: take its address and cast the pointer to the proper type as you traverse the data.
Mitch Frazier is an Associate Editor for Linux Journal.
And there is, it's objcopy to the rescue. objcopy converts object files or executables from one format to another. One of the formats it understands is "binary", which is basicly any file that's not in one of the other formats that it understands. So you've probably envisioned the idea: convert the file that we want to embed into an object file, then it can simply be linked in with the rest of our code.
Let's say we have a file name data.txt that we want to embed in our executable:
# cat data.txt Hello worldTo convert this into an object file that we can link with our program we just useobjcopy to produce a ".o" file:
# objcopy --input binary \
--output elf32-i386 \
--binary-architecture i386 data.txt data.o
This tells objcopy that our input file is in the "binary" format, that our output file should be in the "elf32-i386" format (object files on the x86). The --binary-architecture option tells objcopy that the output file is meant to "run" on an x86. This is needed so that ld will accept the file for linking with other files for the x86. One would think that specifying the output format as "elf32-i386" would imply this, but it does not.Now that we have an object file we only need to include it when we run the linker:
# gcc main.c data.oWhen we run the result we get the prayed for output:
# ./a.out Hello worldOf course, I haven't told the whole story yet, nor shown you main.c. When objcopydoes the above conversion it adds some "linker" symbols to the converted object file:
_binary_data_txt_start _binary_data_txt_endAfter linking, these symbols specify the start and end of the embedded file. The symbol names are formed by prepending _binary_ and appending _start or _end to the file name. If the file name contains any characters that would be invalid in a symbol name they are converted to underscores (eg data.txt becomes data_txt). If you get unresolved names when linking using these symbols, do a hexdump -C on the object file and look at the end of the dump for the names that objcopy chose.
The code to actually use the embedded file should now be reasonably obvious:
#include
extern char _binary_data_txt_start;
extern char _binary_data_txt_end;
main()
{
char* p = &_binary_data_txt_start;
while ( p != &_binary_data_txt_end ) putchar(*p++);
}
Subscribe to:
Comments (Atom)