Criar software livre não é um bicho de sete cabeças: the making of GoboLinux, htop, LuaRocks, etc. Hisham Muhammad http://hisham.



Similar documents
ARMSDK-VM Virtual Appliance A preconfigured Linux system

The System Monitor Handbook. Chris Schlaeger John Tapsell Chris Schlaeger Tobias Koenig

TNM093 Practical Data Visualization and Virtual Reality Laboratory Platform

Leak Check Version 2.1 for Linux TM

Linux System Administration on Red Hat

Redhat 6.2 Installation Howto -Basic Proxy and Transparent

Introduction to Operating Systems

University of Pennsylvania Department of Electrical and Systems Engineering Digital Audio Basics

IBM Tivoli Monitoring Version 6.3 Fix Pack 2. Infrastructure Management Dashboards for Servers Reference

Setting up PostgreSQL

TOP(1) Linux User s Manual TOP(1)

GTk+ and GTkGLExt Build Process for Windows 32- bit

Running your first Linux Program

MCTS Guide to Microsoft Windows 7. Chapter 10 Performance Tuning

MyOra 3.0. User Guide. SQL Tool for Oracle. Jayam Systems, LLC

CS197U: A Hands on Introduction to Unix

Birmingham Environment for Academic Research. Introduction to Linux Quick Reference Guide. Research Computing Team V1.0

Hands-On UNIX Exercise:

Suricata Performance White Paper

TEL2821/IS2150: INTRODUCTION TO SECURITY Lab: Operating Systems and Access Control

HammerDB Metrics. Introduction. Installation

Tutorial 0A Programming on the command line

Creating an LDAP Directory

Module One: Getting Started Opening Outlook Setting Up Outlook for the First Time Understanding the Interface...

Installation Guide for Basler pylon 2.3.x for Linux

Houston Region Diesel Engine Database Minimum System Requirements Installation Instructions Quick Start Guide version 0.1

Super Manager User Manual. English v /06/15 Copyright by GPC

Q N X S O F T W A R E D E V E L O P M E N T P L A T F O R M v Steps to Developing a QNX Program Quickstart Guide

Teradata SQL Assistant Version 13.0 (.Net) Enhancements and Differences. Mike Dempsey

Database Studio is the new tool to administrate SAP MaxDB database instances as of version 7.5.

MyOra 3.5. User Guide. SQL Tool for Oracle. Kris Murthy

Alfresco Online Collaboration Tool

File System Overview and Interview Questions About Unix

PetaLinux SDK User Guide. Application Development Guide

Create and Manage Discussion Forums and Threads

10 STEPS TO YOUR FIRST QNX PROGRAM. QUICKSTART GUIDE Second Edition

Cisco Networking Academy Program Curriculum Scope & Sequence. Fundamentals of UNIX version 2.0 (July, 2002)

JUMP START INTO WINDOWS 10

Acronis Backup & Recovery 10 Server for Linux. Update 5. Installation Guide

Table of Contents. The RCS MINI HOWTO

RDM+ Remote Desktop for Android. Getting Started Guide

Tutorial Guide to the IS Unix Service

Acronis Backup & Recovery 10 Server for Linux. Installation Guide

Lab 1: Introduction to the network lab

INTEGRAL OFF-LINE SCIENTIFIC ANALYSIS

An Introduction to the Linux Command Shell For Beginners

Software Deployment and Configuration

The KSystemLog Handbook. Nicolas Ternisien

Migration of Process Credentials

System Resources. To keep your system in optimum shape, you need to be CHAPTER 16. System-Monitoring Tools IN THIS CHAPTER. Console-Based Monitoring

How to Build an RPM OVERVIEW UNDERSTANDING THE PROCESS OF BUILDING RPMS. Author: Chris Negus Editor: Allison Pranger 09/16/2011

Hypercosm. Studio.

WHAT S NEW IN OUTLOOK 2010 & HOW TO CUSTOMIZE IT

Build a GCC-based cross compiler for Linux

Procedure to Create and Duplicate Master LiveUSB Stick

Testing for Security

White Noise Help Guide for iphone, ipad, and Mac

Basic UNIX 4: More on the GUI

Using the Local Document Organizer in ProjectWise

WINDOWS PROCESSES AND SERVICES

USER GUIDE. Unit 2: Synergy. Chapter 2: Using Schoolwires Synergy

Introduction to Linux and Cluster Basics for the CCR General Computing Cluster

Dwebs IIS Log Archiver Installation and Configuration Guide for Helm 4

INF-110. GPFS Installation

Command Line Crash Course For Unix

Linux Labs: mini survival guide

Installing VMware Tools on Clearswift v4 Gateways

NDSU Technology Learning & Media Center. Introduction to Google Sites

Welcome to PowerClaim Net Services!

Buildroot for Vortex86EX (2016/04/20)

Fred Hantelmann LINUX. Start-up Guide. A self-contained introduction. With 57 Figures. Springer

Using Process Monitor

The Build Process. of (GNU Tools for ARM Embedded Processors)

A Quick Guide to Wrike

Lab 0: Preparing your laptop for the course OS X

Avaya Network Configuration Manager User Guide

Laboratory Report. An Appendix to SELinux & grsecurity: A Side-by-Side Comparison of Mandatory Access Control & Access Control List Implementations

Command Line - Part 1

Documentum Desktop Client on Windows 2000 Terminal Services

Editors Comparison (NetBeans IDE, Eclipse, IntelliJ IDEA)

LSN 10 Linux Overview

Appointment Scheduler

Agenda. Using HPC Wales 2

Static webpages with Pelican

Computer Systems II. Unix system calls. fork( ) wait( ) exit( ) How To Create New Processes? Creating and Executing Processes

Lab 1 Beginning C Program

CS 377: Operating Systems. Outline. A review of what you ve learned, and how it applies to a real operating system. Lecture 25 - Linux Case Study

Google Drive: Access and organize your files

gbuild: State of the LibreOffice build system

Version Control with Git. Dylan Nugent

ICP Data Validation and Aggregation Module Training document. HHC Data Validation and Aggregation Module Training Document

Technology in Action. Alan Evans Kendall Martin Mary Anne Poatsy. Eleventh Edition. Copyright 2015 Pearson Education, Inc.

Robot CONSOLE 6 User Guide

ONE-TOUCH MAIL V 2.3 MANUAL

Introduction to Running Hadoop on the High Performance Clusters at the Center for Computational Research

Linux Tools for Monitoring and Performance. Khalid Baheyeldin November 2009 KWLUG

PuTTY/Cygwin Tutorial. By Ben Meister Written for CS 23, Winter 2007

System Administration

Server & Client Optimization

Dalhousie University CSCI 2132 Software Development Winter 2015 Lab 7, March 11

Transcription:

Criar software livre não é um bicho de sete cabeças: the making of GoboLinux, htop, LuaRocks, etc. Hisham Muhammad http://hisham.hm/ @hisham_hm

apresentações

(*vida == &phd_comics)

começando pelo começo #include <stdio.h> #include <unistd.h> main() { pid_t pid = fork(); if (pid == 0) { printf("processo filho!\n"); } else if (pid < 0) { fprintf(stderr, "erro!\n"); exit(1); } else { printf("processo pai!\n"); } return 0; }

começando pelo começo #include <stdio.h> #include <unistd.h> main() { pid_t pid = fork(); if (pid == 0) { printf("processo filho!\n"); } else if (pid < 0) { fprintf(stderr, "erro!\n"); exit(1); } else { printf("processo pai!\n"); } return 0; }

primeiros passos: bolsa de IC

FISL 1!

1 Fórum Internacional de Software Livre 2000

vivendo no lab hisham@unisinos ~] rpm -i gkrellm

vivendo no lab hisham@unisinos ~] rpm -i gkrellm Permission denied, mere mortal!

vivendo no lab hisham@unisinos ~] rpm -i gkrellm Permission denied, mere mortal! hisham@unisinos ~] cd gkrellm-1.0 hisham@unisinos ~/gkrellm-1.0]./configure --prefix=$home; make; make install... compila compila compila... compilou!

vivendo no lab hisham@unisinos ~] rpm -i gkrellm Permission denied, mere mortal! hisham@unisinos ~] cd gkrellm-1.0 hisham@unisinos ~/gkrellm-1.0]./configure --prefix=$home; make; make install... compila compila compila... compilou! hisham@unisinos ~/gkrellm-1.0] cd hisham@unisinos ~] gkrellm

vivendo no lab hisham@unisinos ~] rpm -i gkrellm Permission denied, mere mortal! hisham@unisinos ~] cd gkrellm-1.0 hisham@unisinos ~/gkrellm-1.0]./configure --prefix=$home; make; make install... compila compila compila... compilou! hisham@unisinos ~/gkrellm-1.0] cd hisham@unisinos ~] gkrellm Command not found!

vivendo no lab hisham@unisinos ~] rpm -i gkrellm Permission denied, mere mortal! hisham@unisinos ~] cd gkrellm-1.0 hisham@unisinos ~/gkrellm-1.0]./configure --prefix=$home; make; make install... compila compila compila... compilou! hisham@unisinos ~/gkrellm-1.0] cd hisham@unisinos ~] gkrellm Command not found! hisham@unisinos ~] export PATH=$PATH:$HOME/bin

vivendo no lab hisham@unisinos ~] rpm -i gkrellm Permission denied, mere mortal! hisham@unisinos ~] cd gkrellm-1.0 hisham@unisinos ~/gkrellm-1.0]./configure --prefix=$home; make; make install... compila compila compila... compilou! hisham@unisinos ~/gkrellm-1.0] cd hisham@unisinos ~] gkrellm Command not found! hisham@unisinos ~] export PATH=$PATH:$HOME/bin hisham@unisinos ~] gkrellm # Yay!

algum tempo depois... hisham@unisinos ~] cd $HOME/bin hisham@unisinos ~/bin] ls

algum tempo depois... hisham@unisinos hisham@unisinos a2p a2x a2x.py acat accept accessdb aclocal acpid addpart AddUser adiff afmtodit agetty Alien als animate apack appres apropos ar arepack arp ~] cd $HOME/bin ~/bin] ls flac flex flex++ flock fmt fold font2c free Freshen fribidi fsck fsfreeze fstobdf fstrim ftp funzip fuser g++ gawk gcc gcc-ar gcc-nm ld ldapadd ldapexop ldapurl ldattach ld.bfd ldconfig ldd lddlibc4 less lessecho lesskey lex lexgrog libtool linguist link linkicc links linux32 linux64 List pod2man pod2texi pod2text portmap poweroff powertop ppdc ppdhtml ppdi ppdmerge ppdpo pphs ppm2tiff pppd pppdump pppstats pr preconv printafm printenv printf prlimit testgdbm texi2any texi2dvi texi2pdf texindex text2gif tfmtodit tftp tic tidy tiff2bw tiff2pdf tiff2ps tiffcmp tiffcp tiffcrop tiffdump tiffinfo tiffset tificc timeout tload

algum tempo depois... hisham@unisinos hisham@unisinos aclocal alsa appdata apps apr-1 autoconf avahi awk bison cups dbus-1 devhelp dit doc dtds econnman ecore e_dbus edje eeze ~] cd $HOME/share ~/share] ls efreet git-gui emacs gitk embryo gitweb emotion glib-2.0 eo gnats epdfview gnome et gnupg ethumb groff evas grub examples gtk-2.0 ffmpeg gtk-3.0 fonts gtk-doc GConf hal gcr-3 hplip gdb i18n gdm icons gettext icu gimp info gir-1.0 intltool git-core keymaps libiodbc libtool locale man mime mimelnk mirage misc ncursesw p11-kit pixmaps polkit-1 ppd purple pygtk rage sip sounds ss syslinux t1lib tabset terminfo texinfo texmf themes unimaps vala vim virtuoso vlc X11 xcb xml xmlto zoneinfo zsh

segunda tentativa! hisham@unisinos ~] rm -rf * hisham@unisinos ~] cd gkrellm-1.0 hisham@unisinos ~/gkrellm-1.0]./configure --prefix=$home/gkrellm hisham@unisinos ~/gkrellm-1.0] make; make install... compila compila compila... compilou! hisham@unisinos ~/gkrellm-1.0] cd hisham@unisinos ~] gkrellm Command not found! hisham@unisinos ~] export PATH=$PATH:$HOME/gkrellm/bin hisham@unisinos ~] gkrellm # Yay!

segunda tentativa! hisham@unisinos ~] ls afterstep gimp audacious gtk bison libpng wmtray wmmon wmsys

segunda tentativa! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] echo $PATH /bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/home/hisham/af terstep/bin:/home/hisham/audacious/bin:/home/hisham/bison/bin:/home/hisham/g imp/bin:/home/hisham/gtk/bin:/home/hisham/libpng/bin:/home/hisham/wmtray/bin :/home/hisham/wmmon/bin:/home/hisham/wmsys

segunda tentativa! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] echo $PATH /bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/home/hisham/af terstep/bin:/home/hisham/audacious/bin:/home/hisham/bison/bin:/home/hisham/g imp/bin:/home/hisham/gtk/bin:/home/hisham/libpng/bin:/home/hisham/wmtray/bin :/home/hisham/wmmon/bin:/home/hisham/wmsys hisham@unisinos ~] echo $LD_LIBRARY_PATH /lib:/usr/lib:/usr/local/lib:/home/hisham/afterstep/lib:/home/hisham/afterst ep/bin:/home/hisham/bison/bin:/home/hisham/gimp/bin:/home/hisham/gtk/bin:/ho me/hisham/libpng/bin:/home/hisham/wmtray/bin:/home/hisham/wmmon/bin:/home/hi sham/wmsys

ideia! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] mkdir bin

ideia! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] mkdir bin hisham@unisinos ~] ln -nfs */bin/* bin

ideia! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] mkdir bin hisham@unisinos ~] ln -nfs */bin/* bin hisham@unisinos ~] export PATH=$PATH:$HOME/bin

ideia! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] mkdir bin hisham@unisinos ~] ln -nfs */bin/* bin hisham@unisinos ~] export PATH=$PATH:$HOME/bin hisham@unisinos ~] echo $PATH /bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/home/hisham/bin

ideia! hisham@unisinos ~] ls afterstep gimp wmtray audacious gtk wmmon bison libpng wmsys hisham@unisinos ~] mkdir bin hisham@unisinos ~] ln -nfs */bin/* bin hisham@unisinos ~] export PATH=$PATH:$HOME/bin hisham@unisinos ~] echo $PATH /bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/home/hisham/bin hisham@unisinos ~] ls -l bin/ lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 afterstep -> afterstep/bin/afterstep lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 audacious -> audacious/bin/audacious lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 bison -> bison/bin/bison lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 gimp -> gimp/bin/gimp lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 gimp-0.9 -> gimp/bin/gimp-0.9 lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 gimptool -> gimp/bin/gimptool lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 wmtray -> wmtray/bin/wmtray lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 wmmon -> wmmon/bin/wmmon lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 wmsys -> wmsys/bin/wmsys lrwxrwxrwx 1 hisham hisham 37 May 7 00:24 yacc -> bison/bin/yacc

"long story short"...

top

htop 0.1 htop-0.13.tar.gz 22kB wc -l *.c 1684

htop hoje htop-1.0.3.tar.gz 390kB wc -l *.c 9386

What's new in version 1.0.4 * BUGFIX: Fix crash when scrolling an empty filtered list. What's new in version 1.0.3 * Tag all children ('c' key) * Fixes in accounting of guest time when using virtualization (thanks to Patrick Marlier) * Performance improvements (thanks to Jann Horn) * Further performance improvements due to conditional parsing of IO data depending on selected fields. * Better consistency in coloring. * Increase limit of buffer when tracing a deep nested process tree. * Display pagefault stats. * BUGFIX: Fix crash when adding meters and toggling detailed CPU time. (thanks to Dawid Gajownik) * Add column to track the OOM-killer score of processes (thanks to Leigh Simpson) What's new in version 1.0.2 * Add IO priority support ('i' key) * Avoid deleting.htoprc if it is a symlink * Fail gracefully when /proc is not mounted (thanks to Philipp Hagemeister) * Option to update process names on every refresh (thanks to Rob Hoelz) * BUGFIX: Fix crashes when process list is empty What's new in version 1.0.1 * Move.htoprc to XDG-compliant path ~/.config/htop/htoprc, respecting $XDG_CONFIG_HOME (thanks to Hadzhimurad Ustarkhan for the suggestion.) * Safer behavior on the kill screen, to make it harder to kill the wrong process. * Fix for building in FreeBSD 8.2 (thanks to Trond Endrestol) * BUGFIX: behavior of 'F' (follow) key was broken, also affecting the persistence of mouse selections. * BUGFIX: keep main panel up-to-date when running the screen manager, to fix crash when processes die while on the F9/Kill screen.

What's new in version 0.2.1 * Sorting by process or memory usage ('P' and 'M', like top) * Quicker default update (1.5 second, not yet configurable) * Now the order of the elements in the process list stay 'locked' for a while after you move the cursor to ease selecting a process * Corrected the installation instructions in README (Thanks to Jeremy Eglen) * Should now compile cleanly on Conectiva 9 and similar systems (Thanks to Adriano Frare for the report) * Friendlier Makefile * Help screen ('h') What's new in version 0.2 * Memory indicators in header now show used and total, in MB * Preliminary support for sorting (CPU% only) * Memory percentage field (resident memory / used memory) * BUGFIX: identified source of spurious crashes * Can search names containing numbers (Thanks to Rafael Jeffman) * Correctly calculates memory page size (Thanks to Rafael Jeffman) What's new in version 0.13 * Handles terminal resize * Display all user names (not only those in /etc/passwd) (Thanks to Julio Biason) What's new in version 0.12 * Support for 2.6 kernels * Uses terminal default colors as a background What's new in version 0.11 * BUGFIX: does not crash when UID is not in /etc/passwd What's new in version 0.1 * Everything!

What's new in version 0.3.3 * Saves column and sorting configuration in ~/.htoprc * Displays "hidden" threads on RedHat 9 (Thanks to Leonardo Godinho) * BUGFIX: supports process names with spaces (Thanks to Marc Calahan) * BUGFIX:...and parentheses :) * BUGFIX: long process names overflowed RichString (Thanks to Marc Calahan) What's new in version 0.3.2 * Performance and memory usage improvements, aided by gprof * BUGFIX: quite a few fixes, aided by Valgrind * Header preview on column configuration screen (Thanks to Marc Calahan) What's new in version 0.3.1 * BUGFIX: crash fixes related to process list handling (thanks to Marc Calahan) * Man page (thanks to Bartosz Fenski) * Tag processes with the space bar * Kill multiple process based on tag * BUGFIX: corrected processing order of updates in list * Screen refresh function on Ctrl-L * Large numbers are shown in MB/GB notation in order to fit screen (thanks to Marc Calahan) * Realtime priority is correctly displayed (thanks to Marc Calahan) * Preliminary support for configurable columns, with 'C' (thanks to Marc Calahan) -- not all columns display properly yet

LuaRocks - uma história diferente

################ como começou um graaaande Makefile wc -l configure Makefile 1129 LUAEXPAT_TESTFILE=luaexpat/src/lxplib.o LuaExpat-fetch: luaexpat luaexpat: cvs $(CVS_LUAFORGE)/luaexpat export -r $(LUAEXPAT_TAG) luaexpat LuaExpat-build: Compat-build $(LUAEXPAT_TESTFILE) $(LUAEXPAT_TESTFILE): luaexpat cd luaexpat && make \ COMPAT_DIR="../$(COMPAT_INCLUDEDIR)" \ LIB_OPTION="$(LIB_FLAG)" \ CFLAGS+="$(LUAEXPAT_FLAGS)" \ lib LuaExpat-install: LuaExpat-build cd luaexpat && make \ LUA_LIBDIR="$(LUAEXPAT_INSTALL_DIR)/lib/lua/5.0" \ LUA_DIR="$(LUAEXPAT_INSTALL_DIR)/share/lua/5.0" \ install LuaExpat-clean: cd luaexpat && make clean LuaExpat-klean: rm -rf luaexpat ################ LUAZIP_TESTFILE=luazip/src/luazip.o LuaZip-fetch: luazip luazip: cvs $(CVS_LUAFORGE)/luazip export -r $(LUAZIP_TAG) luazip LuaZip-build: Compat-build $(LUAZIP_TESTFILE) $(LUAZIP_TESTFILE): luazip cd luazip && make \ COMPAT_DIR="../$(COMPAT_INCLUDEDIR)" \ LIB_OPTION="$(LIB_FLAG)" \ CFLAGS+="$(LUAZIP_FLAGS)" \ lib LuaZip-install: LuaZip-build cd luazip && make \ COMPAT_DIR="../$(COMPAT_INCLUDEDIR)" \ LUA_LIBDIR="$(LUAZIP_INSTALL_DIR)/lib/lua/5.0" \ install LuaZip-clean: cd luazip && make clean LuaZip-klean: rm -rf luazip ################ MD5_TESTFILE=md5/src/md5.o MD5-fetch: md5 md5: cvs $(CVS_LUAFORGE)/md5 export -r $(MD5_TAG) md5 MD5-build: Compat-build $(MD5_TESTFILE) $(MD5_TESTFILE): md5 cd md5 && make \ COMPAT_DIR="../$(COMPAT_INCLUDEDIR)" \ LIB_OPTION="$(LIB_FLAG)" \ CFLAGS+="$(MD5_FLAGS)" MD5-install: MD5-build cd md5 && make \ LUA_LIBDIR="$(MD5_INSTALL_DIR)/lib/lua/5.0" \ LUA_DIR="$(MD5_INSTALL_DIR)/share/lua/5.0" \ install MD5-clean: cd md5 && make clean MD5-klean: rm -rf md5 ################

gerenciadores de módulos CPAN,

gerenciadores de módulos CPAN, RubyGems,

gerenciadores de módulos CPAN, RubyGems, PIP,

gerenciadores de módulos CPAN, RubyGems, PIP, Cabal...

gerenciadores de módulos CPAN, RubyGems, PIP, Cabal......LuaRocks!

timeline do LuaRocks 0.1 1.0 2.0 2.1 2007 2008 2009 2010 2011 2012 2013 http://luarocks.org

repositório do LuaRocks

Projetinhos github.com/hishamhm luacov lua-compat-5.2 protosampler...

dit 0.1! http://hisham.hm/dit

como começar?

todo projeto começa assim #include <stdio.h> int main() { /* partiu! */ return 0; }

Obrigado! h@hisham.hm @hisham_hm http://gobolinux.org http://luarocks.org http://hisham.hm/htop http://hisham.hm/dit http://github.com/hishamhm